指针问题!达人进!

kkcncry 2004-09-24 11:13:50
main()
{
short *p, *q;
short ar[10]={0};
p = q = ar;
p++;
printf("%5d", p-q); ????????不理解
printf("%5d", (char*)p - (char*)q);????????不理界
printf("%5d", sizeof(ar)/sizeof(*ar));
}
假设sizeof(short)==2
输出结果为1 2 10
请高人指点!
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hellboy 2004-09-24
  • 打赏
  • 举报
回复
回复人: Wolf0403(完美废人)(潜伏期。。。) ( ) 信誉:110 2004-09-24 11:30:00 得分: 0


顺便说说,用 sizeof 求一个数组的大小不是一个好习惯……


应该是个好习惯才对!!!
  • 打赏
  • 举报
回复
p=q=ar;//p和q都指向数组ar的第一个元素。
p++;//p往向移一个元素(一个整数型元素,两个字节)
p-q表示p在q的后面第多少个元素,p只加了一次,当然是一个
(char *)p - (char * )q//把p、q都看成是字符指针,直接计算p和q相差多少个字符,是2
sizeof(ar)/sizeof(*ar);//sizeof(ar)为10个整型,sizeof(*ar)为一个整型的长度。
Wolf0403 2004-09-24
  • 打赏
  • 举报
回复
顺便说说,用 sizeof 求一个数组的大小不是一个好习惯……
darkstar21cn 2004-09-24
  • 打赏
  • 举报
回复
p,q是short*,p++就是把地址向前移动了一个short的空间(而一个short占2Byte),所以1(short) = p - q;
而char占1Byte,2(char) = p - q;
hcj2002 2004-09-24
  • 打赏
  • 举报
回复
p = q = ar;
p++;

所以 p-q = 1

pacman2000 2004-09-24
  • 打赏
  • 举报
回复
p-q是p在数组里领先q多少个数组元素。
(char*)p-(char*)q是把这个看成char*数组。
因为本来是short数组,2byte,所以p-q是1,(char*)p-(char*)q是2

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧