C语言结构体
结构体的声明:
struct 结构名 { 类型 变量名; 类型 变量名; ... } ;
结构体的定义:
1. struct 结构体名 结构变量名 // 这种结构体定义用于同一结构体不同对象的情况。 struct name xiaoming; struct name xiaohong;
2.
// 多用于函数形参声明,或只有一个结构体变量 struct 结构名 { 类型 变量名; 类型 变量名; ... } 结构变量;
3. 匿名结构体定义:
// 匿名结构体(没有结构名),它只能使用一次,用过一次就不能再用了 struct { 类型 变量名; 类型 变量名; ... } 结构变量;
// 结构体重命名, node == struct tag typedef struct tag{ int num; char name; }node; int main() { struct tag n1; node n2; return 0; } // 或 typedef struct { int num; char name; }node; node n2;
结构体初始化:
// 定义时初始化 struct student{ char name[20]; char sex; int num; }x={"zhangsan",'m',1234}; /************************/ struct student{ char name[20]; char sex; int num; }; struct student s={"zhangsan",'m'}
// 定义后初始化 struct student{ char name[20]; char sex; int num; }stu; int main() { stu.name="zhangsan"; stu.sex='m'; stu.num=1234;return 0; } /*************************/ struct student *stu1; stu->name="zhangsan"; stu->sex='m'; stu->num=1234;
结构体自引用:
/******** error ******/ struct tag_1{ struct tag_1 A; int value; }; /******** success******/ struct tag_1{ struct tag_1 * A; int value; };
extern 引用结构体:
typedef struct { int num; char name; }node; node n1; // 定义n1结构体变量 extern node n1// 引用n1 /****************/ struct node { int num; char name; }node; struct node n1; // 定义n1结构体变量 extern struct node n1 // 引用n1