struct temp{ short a; char b; char c; long d; char e; int f; };
在32位机器上sizeof的大小是()
A. 16 B. 24 C. 13 D. 15
#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 | 填充 |
登录后提交答案