C语言高手来帮个忙!

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:22:26
题目:在16位IBM-PC机上使用C语言,若有如下定义:
struct data
{int i;
char ch;
double f;
}b;
则结构变量b占用内存的字节数是___。
我认为是8,即i、ch分别占2个字节,f占4个字节。而参考答案是11.这是怎么回事?
那各位能不能再解释一下,为什么我们课本上说int、char类型数据均占2个字节,double类型数据占4字节?谢谢!

在编译器没有内存对齐的优化设置下:
在16位机器上是11,因为:
sizeof(int) = 2
sizeof(char) = 1
sizeof(double) = 8

在32位的机器上是13 因为
sizeof(int) = 4
sizeof(char) = 1
sizeof(double) = 8

另外,课本上除非是说错了,或者说的是在具有内存对齐优化的设置下,否则,char型不可能是2字节,无论是32位还是16位机器。
BTW: WCHAR 是 2
TCHAR 要看有没有定义UNICODE宏,定义了就是2,否则就是1

不知道是不是带字节对齐的
没有用过16位的机器不知道

如果是32位机的话
这个结构应该是16个字节
int 4 char 1 double 8 再根据最大字节数变量对齐 = 16
这些东西有点忘记了,如果有不对的请指正

16位机上int二个字节(32位机int 4字节)
char一个字节(32位机char也是1字节)
double八个字节
加起来11
补充一下
long 4字节
float 4字节

peimichael正解

如果你还是不知道就用sizeof(b)测试一下就知道了