1、在外部声明一个新的结构类型,这种结构在任何函数内都可以使用。声明结构变量的时候需要带上struct+结构类名+变量名。
#includestruct mys{ char *name; int age; char *gender;};int main(){ struct mys heihei; heihei.name = "rainn"; heihei.age = 25; heihei.gender = "man";}
2、在函数内部声明一个新的结构类型
#includeint main(){ struct mys { char *name; int age; char *gender; }; struct mys heihei; heihei.name = "rainn"; heihei.age = 25; heihei.gender = "man";}
这种仅在该函数内部可以使用,声明结构变量同上。
3、声明结构类型的时候同时声明变量
#includeint main(){ struct mys { char *name; int age; char *gender; } mys1; struct { char *job; struct mys one; } heihei; heihei.job = "programmer"; heihei.one.name = "heihei"; heihei.one.age = 25; heihei.one.gender = "man";}
*4类型定义。
将结构类型定义在本地头文件中,然后引入之后直接使用,不需要关键字struct。在头文件test.h中定义
typedef struct { char *name; int age;} mys;
然后在.c中引入。当然也可以直接在.c文件中写typedef。
#include#include "test.h"int main(){ mys one; one.name = (mys){.name = "heihei"}; one.age = 25;}
结构变量初始化
#includeint main(){ struct mys { char *name; int age; char *gender; } Tom; struct { char *job; struct mys one; } heihei, *p; Tom = (struct mys){"Tom",18,"man"}; heihei.job = "programmer"; p = &heihei; (*p).one = (struct mys){"heihei", 25}; p->one.gender = "man"; // p->one = (struct mys){.gender = "man"}; //----与上上行的初始化为全部成员初始化,此处若执行则除了gender其他为0/null printf("%s\n", (*p).job); printf("%s\n", p->one.name); printf("%d\n", p->one.age); printf("%s\n", p->one.gender);}
由此看到结构体内部也是可以放结构体成员,还有->操作是可以由指针指向结构体。且与数组不同的是,结构体本身并不是指针,所以取结构体地址的时候需要加上&符号