1.结构体的声明+初始化+对成员的访问
struct s
{
int age;
char* p;
};//在分号里面可以定义一全局变量 但是不推荐 全局变量由于可能会被在任意位置被修改 不建议在此处定义
int main()
{
struct s s1 = { 12,"sdsd" };//对数组内容的初始化
struct s* p1 = &s1;
printf("%d %s", s1.age, s1.p);//进行打印 可以采用.的形式进行访问
printf("%d %s", p1->age, p1->p);//这就是通过指针形式对元素进行访问
}
2.结构体自调用的注意事项
//结构体的自引用 方法 切记不能在内部调用自己 要想调用应当采取传地址的形式
struct s
{
int age;
struct s* s1;//及结构体的自引用 可以写成指针的形式 但是不可以写成 下面的形式
// struct s s1;//这个是千万不能写的 如果让你计算这个结构体大小 怎么计算 会无限递归的
};
3.结构体大小的计算 注意在此计算当中要注意计算的规则
1. 第一个成员在与结构体变量偏移量为0的地址处。 2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的值为8 3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。//这一点很重要 4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整 体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。 struct S2 { char c1; char c2; int i; }; printf("%d\n", sizeof(struct S2));//这段代码应当如何计算 我们首成员不用管位置直接放置
?//图片进行解释
|