请教这一段C程序

来源:百度知道 编辑:UC知道 时间:2024/06/06 13:22:43
main()
{ char p[]={'1','2','3'},*q=p;
printf("%d,%d,%d,%d\n",sizeof(p),sizeof(char),sizeof(*q),sizeof(p[0]));
}
为什么运行时输出3,1,1,1;尤其是sizeof(*q)为什么输出是1呢,一个指针占的空间应该是4啊?

sizeof(p),这里的p是数组名,所以返回3是数组的长度,如果你给数组中添一个元素他的值就会变化。sizeof(char),字符的长度为1. sizeof(*q),因为*q指向数组的首地址,所以*q=p[0],是个字符,所以长度也为1, sizeof(p[0])这个p[0]是个字符,长度为1

sizeof(*q):
输出的是*q所占字节,q指向p(数组首地址),所以*q的内容为'1',
也就是一个char型,char占1个字节
所以sizeof(*q)输出是1

sizeof(p):字符数组p的size,包含3个char,为3字节,输出3
sizeof(char):char型的size,char占1个字节 ,输出1
sizeof(p[0]):也就是一个char型,char占1个字节,输出1

*q不是指针,q存放的是数组的首地址,也就是数组第一个元素的地址,*q就是对数组的第一个元素的间接访问,*q就是p[0],sizeof(*q)也就理所当然是1了。