请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质?多谢

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char a[30];
char *b = (char *)malloc(20 * sizeof(char));
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(b));
printf("%d\n", sizeof(a[3]));
printf("%d\n", sizeof(b+3));
printf("%d\n", sizeof(*(b+4)));
return 0 ;
}

结果:30 a是一个数组,所以数组的大小是30*char. char的大小是1.
4 b是一个指针,指针的大小是4。
1 a[3]是数组的一个单位,也是一个char。所以大小为1。
4 b+3是指针运算,所以结果也是一个指针,大小为4。
1 *(b+4)则是取指针的指向的空间,在分配时很明显指定这是一个char,所以也为1.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-01
30//对数组返回整个数组的大小
4//指针大小,32位
1//a[3]是char类型,1
4//b+3是指针运算,结果还是指针,4
1//*(b+4)对指针解析,是char,1
指针跟数组是不同的。另外,对结构struct来说,返回对齐后占用的字节数。本回答被提问者采纳