struct 结构体类型的本质是 数据类型 ,既然是数据类型,就是用来创建变量,而创建的这个变量其实是 变量的集合,是结构体里面成员变量的集合
struct Test
{
int a,b;
};
struct Test t
t.a = 1;
t.b = 2;
//意味着,结构体变量是一个变量的集合,这里的 t 是一个变量的集合,在这个集合里面,有 2 个变量 a和b
这里的 t 是变量,既然是变量,它的本质是一段内存,而 t 又是变量的集合,所以说这段内存被分为了 2 部分,一部分是a 成员变量所占用的内存,一部分是b 成员变量所占用的内存,因此 a 和 b 占用独立的内存
ps -> id = 1; //利用指针,通过箭头 操作符,来访问对应的成员变量,这里是将 id 赋值为 1
这个类型都没定义,怎么不会报错?
因为在整个程序中没有用到 struct Student 这个类型名,也没有用到 Stu 这个 类型名,
仅仅是声明 struct Student 这个类型仅仅可以使用这个名字 Stu 来代替
因为 s 所属的类型没有定义
没有错误和警告,意味着通过指针来访问结构体成员的时候,要使用箭头 -> 操作符
这里的 ps 就是指向 s 的,通过 ps 这个指针来访问成员变量,来改变成员变量,最终改变的是 s 这个结构体变量了,
如果说省略了类型名,那么整个类型就长这个样子
struct {int a, b} 这样写就是一个具体的结构体类型了
通过结构体类型可以定义结构体变量,
struct {int a, b} noname;
这里的 noname 是一个变量,这个变量的类型是 struct {int a, b}
因此,这样写肯定是正确的
noname.a = 1;
noname.b = 2;
这种操作叫 : 定义无名结构体的操作
这里肯定 error ,在定义具体变量之前,必须给出类型的完整定义
编译不过,因为必须 在它定义变量之前出现,否则报错