请教这一段C程序

[复制链接]
查看11 | 回复3 | 2008-12-15 23:11:50 | 显示全部楼层 |阅读模式
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啊?

回复

使用道具 举报

千问 | 2008-12-15 23:11:50 | 显示全部楼层
sizeof(p),这里的p是数组名,所以返回3是数组的长度,如果你给数组中添一个元素他的值就会变化。sizeof(char),字符的长度为1. sizeof(*q),因为*q指向数组的首地址,所以*q=p[0],是个字符,所以长度也为1,
sizeof(p[0])这个p[0]是个字符,长度为1...
回复

使用道具 举报

千问 | 2008-12-15 23:11:50 | 显示全部楼层
*q不是指针,q存放的是数组的首地址,也就是数组第一个元素的地址,*q就是对数组的第一个元素的间接访问,*q就是p[0],sizeof(*q)也就理所当然是1了。...
回复

使用道具 举报

千问 | 2008-12-15 23:11:50 | 显示全部楼层
sizeof(*q): 输出的是*q所占字节,q指向p(数组首地址),所以*q的内容为'1', 也就是一个char型,char占1个字节 所以sizeof(*q)输出是1sizeof(p):字符数组p的size,包含3个char,为3字节,输出3sizeof(char):char型的size,char占1个字节 ,输出1sizeo...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行