1.什么是结构体?为什么要有结构体?
一种自定义类型
struct Student
{
char _name[20];
char _garden[3];
int age;
char _number[11];
};
2.什么是结构体内存对齐?为什么要内存对齐?如何进行内存对齐?
空间换时间;较小内存空间情况下不考虑内存对齐问题;
vs和linux默认对齐参数?是否可以设置?能否让结构体按照任意字节来进行对齐?
vs:8 linux:4
假设:8字节对齐
结构体:计算内存
可以进行设置 #pragma pack(n) n:1.2.4.6.8.16;
(1)让结构体中的每个成员放在一个对齐的位置上,结构体中第一个成员不需要考虑;
min(默认对齐参数,当前成员类型的大小)当前该成员相对与结构体起始位置的偏移量是否为最小值的整数倍?
(2)结构体整体对齐
min(默认对其参数,是否为结构体内成员最大类型大小)
4.结构体中某个成员相对于结构体起始位置的偏移量?
include<stddef.h> 宏:offsetof(struct A,c) ;
5.什么是大小端?如何测试大小端?考虑大小端的情况?
关于计算机网络传输;大端模式: 字数据的高字节存储在低地址中,而字数据的低字节存储在高地址中。
小端模式: 字数据的高字节存储在高地址中,而字数据的低字节存储在低地址中。
void test()
{
struct stu
{
int a;
char ch;
}c;
c.a=1;
if(c.ch==1)
printf("小端\n");
else
printf("大端\n");
}
6."."和“->"d的相同点和不同
相同点:两个都是二元操作符,其右操作符是成员的名称。
不同点:点操作符左边的操作数是一个“结果为结构”的表达式;箭头操作符左边的操作数是一个指向结构的指针。