结构体与结构体指针

C中的结构体,对应JAVA中的类的概念。也就是一些数据结构的集合,形成一种新的数据结构。

见一个例子

struct Man{

   char* name;

   int age;

   int(*func)();

};

void main(){

   //struct Man m1 = {"jack",21};

  struct Man m1;

   m1.name = "watson";

   m1.age = 23;

   printf("%s",m1.name);

   system("pause");

}

用struct来创建一个结构体,结构体中,可以是指针,可以是基本类型,也可以是函数,在main中,有两种方式可以给结构体赋值,一般用第二种,比较通顺。第一种有点JS有意思。

一些简写:

struct Man{

   char* name;

   int age;

}m1;

void main(){

   m1.name = "watson";

   m1.age = 23;

   printf("%s",m1.name);

   system("pause");

}

也就是说,在结构体的申明的时候,直接给了一个变量m1,这个m1,就相当于是一个实例了。可以直接用!

struct Man{

   char* name;

   int age;

}m1,m2={"jack",20}

void main(){

   m1.name = "watson";

   m1.age = 23;

   printf("%s",m1.name);

   system("pause");

}

这种写法,就是在申明的时候,同时申明了两个变明量m1,m2,m2在申明的时候直接赋值了。

还有一种写法,匿名结构体

struct{

  char* name;

   int age;

   int(*func)();

}m1;

void main(){

   m1.name = "watson";

   m1.age = 23;

   printf("%s",m1.name);

   system("pause");

}

即是根据变量名来用! 就相当于,只有m1可以用。这样写可以有效的控制变量的个数。相当于单例

再来一种,就是结构体里,包含结构体--其实就是JAVA里的,实体类里又含有另外的实体类,一样的东西

struct{

   char* name;

   int age;

   struct Teacher {

    char name[20];

}t;

}m1;

void main(){

   m1.name = "watson";

   m1.age = 23;

   strcpy(m1.t.name,"json");

   printf("%s",m1.name);

   system("pause");

}

就说一点,这里的结构体中,直接是用char name[20];  如果是这样写,而不是写在char *name的话,赋值就要麻烦点,就要用 strcpy(m1.t.name,"json"); 来完成赋值

现在讲讲结构体指针

例子如下

struct Student{

   char* name;

   int age;

};

void main(){

   struct Student m1;

   m1.name = "watson";

   m1.age = 23;

   strcpy(m1.t.name,"json");

   struct Student *p = &m1;

   printf(p->name);

   system("pause");

}

关键如下 struct Student *p = &m1; 先申明一个指针,然后将对象的对址赋值

这样就可以直接    p->name 来获得值,是不是很方便宜?

当然,也可以 (*p).name 来获得值,也是没问题的,和以前讲的一个逻辑。

你可能感兴趣的:(结构体与结构体指针)