#include <stdio.h>
//结构是一些值的集合,这些值成为成员变量,结构的每个成员可以是不同类型的变量
//标准结构体
struct Stu//这个Stu是结构体名
{
?? ?//这些是成员变量
?? ?char name[20];
?? ?int age;
?? ?char id[20];
}//这些叫变量列表,可以在这里创建结构体变量,这个是全局变量,即声明的同时定义变量
//赋值存在两种情况,按顺序赋值是s2,不按顺序赋值是s3
s1,s2 = { "zhangsan",23,"111" }, s3 = {.name="李四",.id="112",.age=24},s4;
struct Stu s1; //定义结构体变量s1
//匿名结构体
struct //这里却没有名字
{
?? ?//这些是成员变量
?? ?char id[20];
?? ?int age;
?? ?char name[20];
}s5;//因为没有名字,所以不能像标准结构体一样随便创建结构体变量
?? ?//只能在变量列表的位置,直接创建结构体变量
//结构体的自引用
//注意结构体自引用的时候,不要用匿名结构体,可以避免代码错误
struct Node
{
?? ?int data;//数据域
?? ?struct Node* next;//指针域
};
//typedef 类型 别名;
/*
类型=struct Npde1
?? ?{
?? ??? ?int data;
?? ??? ?struct Node1* next;
?? ?}
别名=Node1
*/
typedef struct Npde1
{
?? ?int data;
?? ?struct Node1* next;
} Node1;
//结构体嵌套
struct SN
{
?? ?char c;
?? ?int i;
}sn1 = { 'q',100 }, sn2 = {.i=200,.c='w'};
struct S
{
?? ?double d;
?? ?struct SN sn;
?? ?int arr[10];
};
int main()?
{
//在声明的时候已经赋值了,在这可以直接使用
?? ?printf("s2.name=%s s3.id=%s\n", s2.name, s3.id);
// 创建标准结构体变量
// struct 结构体名 变量列表名
? ?struct Stu s4;//这个是局部变量
//赋值是这样的
? ?s4.age = 22;
//使用是这样的
? ?printf("s4.age=%d\n",s4.age);
//匿名结构体的使用
s5.age = 21;
printf("s5.age=%d\n",s5.age);
//这里为了方便橙色部分的使用我就不详细的写了
//这是嵌套结构体的赋值,跟数组一样也用{}
? ?struct S s = { 3.14, {'a',99},{1,2,3} };
//嵌套结构体的使用
? ?printf("%lf %c %d\n", s.d, s.sn.c, s.sn.i);
?? ?return 0;
}