struct temp{ short a; char b; char c; long d; char e; int f; };
在32位机器上sizeof的大小是()
A. 16 B. 24 C. 13 D. 15
short a; 2位 char b; 1位,前面的2是1的倍数,所以不用对齐了,就是3 char c; 1位,前面的3是1的倍数,不用对齐,就是4 long d; 4位,前面的4刚好是4的倍数,不用对齐,就是8 char e; 1位,前面的8是1的倍数,不用对齐,就是9 int f; 4位,前面的9不是4的倍数,9至少变12才是4的倍数,也就是12+4=16
short 32位占2字节,char 1字节,long和int 就是4,4(2+1+1)+ 4 +4(1)+4=16
#include<stdio.h> struct temp{ short a; char b; char c; long d; char e; int f; }; int main(){ printf("%lu\n",sizeof(struct temp)); }
输出结果是24,不是16,另外16倒着推也推不出来
18269597545 回复 linanana: 你这代码运行也是16啵
A
解析:
|1Byt...
用户登录可进行刷题及查看答案
|1Byte|1Byte|1Byte|1Byte|
| short | char | char |
| long |
| char | 填充| 填充| 填充|
| int |
共计4 * 4 = 16 Byte,选A
原因:
1. 在32位机中,
char 1字节
short 2字节
int 4字节
long 4字节
2. 数据在计算机中按“边界对齐”方式存储,支持按字寻址、按半字寻址、按字寻址,
半字地址必为2的整数倍,字地址必为4的整数倍,
所以半字长和一个字长的数据在存储时,就算前面有“空位”,为了保持地址的“一致性”,机器会对空位进行填充。
3. 比如:
| char | char | char | 填充 |
| short | short |
| short | 填充 |
登录后提交答案