对复合数据类型的细节了解

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.

作用:当多个类型,多个对象,多个事物只取其一,可以使用共用体。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值