一个指针操作的问题

Big鹏 2009-03-21 04:36:42
//

//谁能解释下为什么*(ptr++)+=123;不会将数组中的7变成130
main()
{
int b=3;
int arr[]={6,7,8,9};
int *ptr=arr;
*(ptr++)+=123; //????
printf("%d %d",*ptr,*(++ptr));
}


...全文
195 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuixd2020 2009-03-22
  • 打赏
  • 举报
回复
这个又是自加问题:
*(ptr++)+=123; //????
printf("%d %d",*ptr,*(++ptr));

*(ptr++)+=123; (++在后面)
等价于:
*prt += 123;
prt++;

printf("%d %d",*ptr,*(++ptr)); //为什么先算*(++ptr)而不是*ptr呢???
这个:(++在前面)所以先对指针自加,后输出指针指向的值
tianya0609 2009-03-22
  • 打赏
  • 举报
回复
楼上的对啊。
sallan 2009-03-22
  • 打赏
  • 举报
回复
楼主的问题很好啊
作为程序员,我们应该重视基础知识的积累和学习
keaiting 2009-03-22
  • 打赏
  • 举报
回复
好,说的好!
zhouqing19871024 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 freestyIe 的回复:]
这个又是自加问题:
*(ptr++)+=123; //????
printf("%d %d",*ptr,*(++ptr));

*(ptr++)+=123; (++在后面)
等价于:
*prt += 123;
prt++;

printf("%d %d",*ptr,*(++ptr));
这个:(++在前面)所以先对指针自加,后输出指针指向的值。
[/Quote]

对 一定要注意这个问题 ++在后,先使用指针然后再加,++在前,先使指针加一再使用
allen1981813 2009-03-22
  • 打赏
  • 举报
回复
129,8
freestyIe 2009-03-22
  • 打赏
  • 举报
回复
同样学习。。。
pengzhixi 2009-03-22
  • 打赏
  • 举报
回复
*(ptr++)+=123;
分成两句:*ptr+=123; ++ptr;
蜥蜴枪王 2009-03-22
  • 打赏
  • 举报
回复
学习=,=
cansen 2009-03-22
  • 打赏
  • 举报
回复
日阿.自己发的贴自己无法修改?
上面有句话打错了.
也许各位有个很大的问题.为什么第一个值指针会停留在arr[2]上? 其实答案是因为 c++中内存分配的方式是从左到右的栈式分配 .也就是说 . *ptr 比*(++ptr)先入栈.所以.*(++ptr)比 *ptr先出栈.所以*(++ptr)获得了率先执行的机会.请各位以后注意这个问题.
cansen 2009-03-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 mupengzhi 的帖子:]
//
C/C++ code
//谁能解释下为什么*(ptr++)+=123;不会将数组中的7变成130
main()
{
int b=3;
int arr[]={6,7,8,9};
int *ptr=arr;
*(ptr++)+=123; //????
printf("%d %d",*ptr,*(++ptr));
}
[/Quote]

入门级的一个问题.一步一步来看.
int *ptr=arr; //此时ptr指向 arr[0]
*(ptr++)+=123; // 此时ptr指向 arr[1], 抛出的却是arr[0]的地址,所以arr[0] = 123+6
printf("%d %d",*ptr,*(++ptr)); // 调用第一个参数的时候,ptr以指向了arr[2],调用第2个参数的时候,ptr指向了arr[2]并且返回了arr[2]的值...也许各位有个很大的问题.为什么第一个值指针会停留在arr[2]上? 其实答案是因为 c++中内存分配的方式是从左到右的栈式分配 .也就是说 . *ptr 比*(++ptr)先入栈.所以.*(++ptr)比 *ptr后出栈.所以*(++ptr)获得了率先执行的机会.请各位以后注意这个问题.
所以你的程序运行的结果为:8 8

最后.本人认为本人也是菜鸟..所以请菜鸟们不要感觉自己什么都不如别人.努力地自己去积累经验就好.
gxw145 2009-03-21
  • 打赏
  • 举报
回复
main()
{
int b=3;
int arr[]={6,7,8,9};
int *ptr=arr;
*(ptr++)+=123; //????
//等价于*ptr += 123;ptr = ptr + 1;运行到这时的ptr指向arr[1]
printf("%d %d",*ptr,*(++ptr));
//这句就有点怪了,因为vc6.0里是先做*(++ptr))运算,输出8,自然地*ptr
//也为8了,这个运行顺序也搞不懂。待高手解决
}
freestyIe 2009-03-21
  • 打赏
  • 举报
回复
这个又是自加问题:
*(ptr++)+=123; //????
printf("%d %d",*ptr,*(++ptr));

*(ptr++)+=123; (++在后面)
等价于:
*prt += 123;
prt++;

printf("%d %d",*ptr,*(++ptr));
这个:(++在前面)所以先对指针自加,后输出指针指向的值。
feng4206yu 2009-03-21
  • 打赏
  • 举报
回复
++可是在后面哦...
mfcvbird 2009-03-21
  • 打赏
  • 举报
回复
vc6运行 8 8
keaiting 2009-03-21
  • 打赏
  • 举报
回复

楼主试一下*(++ptr)+=123;就知道是怎么回事了
  • 打赏
  • 举报
回复
这才是你要的结果,有2个地方帮你改了,你自己看为什么吧

main()
{
int i,b=3;
int arr[]={6,7,8,9};
int *ptr=arr;
*(++ptr)+=123; //????
ptr=arr;
printf("%d %d \n",*ptr,*(++ptr));
for(i=0;i<4;i++)
cout<<arr[i]<<endl;
}

  • 打赏
  • 举报
回复
看到真相了吧

main()
{
int i,b=3;
int arr[]={6,7,8,9};
int *ptr=arr;
*(ptr++)+=123; //????
printf("%d %d \n",*ptr,*(++ptr));
for(i=0;i<4;i++)
cout<<arr[i]<<endl;
}

xylicon 2009-03-21
  • 打赏
  • 举报
回复
*(ptr++)+=123; //????
这句话相当于,
*ptr = 123;
ptr = ptr + 1;

所以改变的是6的值。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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