结构是一些值得集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量
在结构体中包含一个类型为该结构体本身的成员是否可以呢?
对结构体类型的重命名
把struct stu 简化成--mei
## 以下这两种写法都可以
1.struct stu s1;
2.mei s2;
有了结构体类型,那如何定义变量,其实很简单
打印输出
计算结构体的大小
struct stu {
char c1;
int a;
char c2;
};
struct stu2 {
char c1;
char c2;
int a;
};
int main() {
struct stu s1 = { 0 };
struct stu2 s2 = { 0 };
printf("%d", sizeof(s1));
printf("%d", sizeof(s2));
return 0;
}
为什么会是这个结果呢???
stu和stu2里面的成员变量大小都一模一样,为什么两个结构体的大小不一样呢?,那么我们来看看结构体在内存中是如何存放的。
例题二
struct stu3 {
double d;
char c;
int i;
};
struct stu4 {
char c1;
struct stu3 s3;
double d;
};
int main() {
struct stu3 s1 = { 0 };
struct stu4 s2 = { 0 };
printf("%d\n", sizeof(s1));
printf("%d", sizeof(s2));
return 0;
}
没设置之前
struct s {
char c1; //对齐数 1|8----1(取最小)
double d; //对齐数8| 8----8(取最小)
};
int main() {
struct s s = { 0 };
printf("%d", sizeof(s));
}
设置之后:
#pragma pack(4)
struct s {
char c1; //对齐数1|4 -----1(取最小)
double d; //对齐数8|4-----4(取最小)
};
int main() {
struct s s = { 0 };
printf("%d", sizeof(s));
}
例题一:
struct s {
int a : 2;
int b : 5;
int c : 10;
int d : 30; //不能大于32。因为一整型是32个比特位。
};
int main() {
struct s stu={0};
printf("%d", sizeof(s));
return 0;
}
位段的作用:减少开辟的空间。
原文:https://blog.51cto.com/u_15100290/2722235