联合体由多个结构体组成,总结结构体和联合体的区别
Yyds干货库存
@TOC
一.结构
1.结构变量
结构s
char name[20];
int age
}p1,p2;
int main()
结构P3;
返回0;
}
P1、p2和p3都是结构变量。
然而,P1和P2被定义为main之外的全局变量。
P3是一个局部变量
2.特别声明
声明时,它没有完全声明为匿名结构类型。
注意,匿名结构类型只能使用一次。
#包含stdio.h
结构体
char name[20];
int age
};
3.结构的引用
1.嵌套调用
通过调用pa变量返回到stdent结构。
#包含stdio.h
结构学生
char name[20];
int age
char sex[20];
结构教师
char name[20];
int age
构造学生pa;
char sex[20];
};
2.自引
(1)自己做不到。我可以称自己为无限娃娃。
#包含stdio.h
结构S
char name[20];
int age
结构的pa;//错误
int main()
结构S;
返回0;
}
(2)如果要访问下一个同类型同自身类型的结构
使用指针指向下一个要访问的结构。
#包含stdio.h
结构s
int age
结构s * nest
};
# 3.结构初始化
这里的初始化很简单。
以嵌套调用为例。
#包含stdio.h
结构学生
char name[20];
int age
char sex[20];
结构教师
char name[20];
int age
结构学生的;
char sex[20];
int main()
Struct老师p={ 张三,三五,{ 王五,十六,男 },男 };
printf( % s % d % s % d % s % s % s \ n ,个人姓名,个人年龄,个人姓名,个人年龄,个人性别,
p . sex };
返回0;
}
四。结构的记忆对齐
1.第一个结构构件放置在偏移0处。
2.如果放在VS中,默认对齐号是8。
下面的结构成员使用它的字节与默认的对齐号进行比较,较小的那个是结构成员的对齐号。结构成员被放置在对齐数字的整数倍的地址处。
结构的大小是所有成员的最大对齐方式的整数倍。
VS中的默认对齐数字是8
Char是1字节,1 8,也就是A的对齐号是1。
Int是4字节4 ^ 8,也就是B的对齐数是4。
C为1字节,1 8,即C的对齐数为1。
正常情况下应该取9个字节,9没有达到最大对齐数4的整数倍。
所以休息12分钟。
2.
#包含stdio.h
结构s2
char c1
char c2
int I;
int main()
strcut S2 S;
printf(%d\n ,sizeof(S));
返回0;
}
Char是1字节,1 8,也就是c1的对齐号是1
Char c2是1字节1 8,也就是c2的对齐号是1。
Int为4字节4 ^ 8,即I的对齐数为4。
最大对齐数是4,因为最后,8是4的整数倍。
即8
3.修改校准号。
#包含stdio.h
#pragma pack(2) //将默认对齐编号修改为2
结构s
char a;
int b;
char c;
#pragma pack() //消除修改后的对齐号,即只对上述结构生效。
int main()
结构s pa={ 0 };
printf(%d\n ,sizeof(pa));
返回0;
}
请注意,校准号是结构构件偏转的位置。
偏转的大小是字节数。
修改后,默认对齐编号为2
Char是1字节,1 2,也就是A的对齐号是1
Int是4字节4 ^ 2,也就是B的对齐数是2。
C为1字节,1 ^ 2,即C的对齐数为1。
最大对齐数为2。
但是结构最后是7,不是2的整数倍,最后是8。
段的成员必须是int、unsigned int、signed int。
成员后面必须跟冒号和数字。
比特的空间是按照int或者char打开的。
我们通常将位段的成员从低位转移到高位。
如果空间中没有足够的内容留给下一个成员使用,这个空间就会被浪费。
2.练习题
#包含stdio.h
结构S
char _ a:3;//a占用两位。
char _ b:4;//b占用4位。
char _ c:5;//c占用5位。
char _ d:4;//d占用4位。
结构S={ 0 };
s.a=10
s.b=12
s . c=3;
标准差=4;
10-1010-010-占用3位。
B 12-1100-1100-4位。
C 5-00101-00101-5位。
D 4-0010-0010-4位。
不及物动词财团
1.一种特殊的自定义类型,主要表现为成员共享一个空间。
财团的计算
财团的规模至少是最大成员的规模。
当最大成员大小不是最大对齐数的整数时,对齐到最大对齐数的整数。
1.正常算法问题
VS默认校准号是8
Int是4字节,4 ^ 8,A的对齐数是4。
Char是1字节,1 8 b的对齐号是1
a和B共享第一个空格,所以是4
因为4是最大对齐数4的整数倍,也就是4。
#包含stdio.h
联合国联盟
int a;
char b;
int main()
联合国巴勒斯坦权力机构联盟;
printf(%d\n ,sizeof(pa));//4
返回0;
}
2.用财团来判断大小端。
#包含stdio.h
int move()
联合国联盟
int a;
char b;
u . a=1;
返回u.b
int main()
int ret=move();
if(ret==1)
Printf(小端\ n );
其他
printf( big end \ n );
返回0;
。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。