目录
#1.结构体
在现实世界里,常常有一些复杂对象不好用简单的变量或数组去表示,这时候C语言的自定义类型:结构体,就可以帮我们很好的定义这些复杂对象。
1.1 结构体是什么:
结构体是一些值的集合,这些值被称为成员变量,成员变量可以是不同的类型。
1.2 结构体的声明:
这个时候我们就声明了一个有两个char类型和一个int类型的结构体类型struct str
1.3 结构体的不完全声明:
与上面的声明不同的是少了结构体标签,所以这个结构体类型只有一个变量s3,不可在函数内重新创建新的变量
1.4 结构体的自引用
结构体是一些值的集合,那结构体本身是不是可以是自己的成员变量呢?
不行。因为如果这样做,那结构体的大小怎么计算,一层套一层根本计算不了。
那怎么自引用呢?正确的自引用方法:
1.5 结构体变量的定义和初始化
根据前面说的,那定义一个结构体变量其实就很简单了
struct str
{
int a;
int b;
}s1;//声明的时候同时定义结构体变量s1
struct str s2;//定义结构体变量s2
struct str s3 = { 3,4 };//初始化结构体变量同时赋初值
struct ptr
{
int a;
int b;
};
struct Node
{
int a;
struct ptr s1;
struct Node* p1;
}n1{3,{4,5},NULL}//结构体嵌套的初始化并赋初值
1.6 结构体内存对齐
前边介绍了结构体的初步使用,接下来介绍深入一点的知识,结构体的大小如何计算?在内存中怎么存储?
struct
{
char a;
int b;
char c;
}s1;//结构体的大小是如何计算的?在内存中是如何存储的?
那到底该怎么计算?
结构体在内存中是需要进行内存对齐的,也就是: