1 结构体
作用:在编程中我们经常要传送的不是简单的字节流(char型)而是多种数据结合起来的一个整体,其表现形式是一个结构体
注意事项:在结构体中定义多个数据类型时 ,如果最大的数据类型>=4字节 统一以“字”为对齐,<4以“半字”对齐,比如
struct node
{
char a;
int b;
char c;
};
struct node link;
int count = sizeof(link);
printf(“%d\n”,count);输出结果为 12 把char a 与 int b互换输出却变成了8 因为第一个给a分配了4个字节 char类型用去一个 剩下三个不够int类型使用 再分配4个字节 类推,在互换之后 int 四个字节 再给char a分配时候用去一个 还能再塞进char c 所以只用去8 个字节。 如果把中间的int b换成了short b呢?按照类推应该这时候半字对齐应该是6个字节,其实这是错误的 这是非常特殊的一种情况 固定为8字节。
2 共用体
定义和结构体类似,不过共用体的所用成员都在同一段内存中存放,起始地址一样,并且同一个时刻只能使用其中的一个成员变量。
内存大小有其中最大的数据类型决定 比如int 那么就是4个字节。
举个例子
union node
{
char ch[2];
int num;
};
union node p;
p.num = 0;
p.ch[0] = 0;
p.ch [1] = 1;
printf("p.num = %d\n",p.num);
首先在计算机中数字以补码形式存在 那么四个字节中一开始放了32个0 数组是连续的 第一个字节中的8个0被p.num [0]= 0 代替 还是8个0,第二个字节中的8个0被p.ch[1] = 1代替变成7个0一个1 剩下不变,那么32位2进制就是前面15个0加上1再加上后面16个0 也就是十进制的256.
作用:当多个类型,多个对象,多个事物只取其一,可以使用共用体。