这个具体是怎末算的?

来源:百度知道 编辑:UC知道 时间:2024/06/19 21:51:55
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++) +=123;
printf("%d %d",*ptr , *(++ptr));

我是这么理解的
*(ptr++) +=123 等于 *(ptr++)=*(ptr++)+123
先算左边 *(ptr++)+123 为6+123=129 此时指针指向arr[1]=7
下面的我不知道怎末算拉。。。。

我运行后是 8 8 我用的是 DEV-C++ 5

那个给我解释下 这个到底怎末算?具体点 谢谢
为什么arr[0]=129 ??
*(ptr++)=*(ptr++)+123
*(ptr++)=129
此时*(ptr++)好像不是arr[0]吧

*(ptr++) +=123;
修改arr[0]的值为129,并且ptr指向arr[1]
printf("%d %d",*ptr , *(++ptr));
函数实参按从右到左入栈
先*(++ptr),ptr指向arr[2],返回arr[2]的内容
*ptr,ptr在上一步已经被修改,返回arr[2]的内容
所以打印值为8 8

记住函数的参数按从右到左运算就成了

#include <stdio.h>
main()
{
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++) +=123;
printf("%d %d\n",*ptr , *(++ptr));
for(int i=0;i<5;i++)
printf("%d ",arr[i]);
}
的输出结果为
8 8
129 7 8 9 10
ptr++是后加,表示从下调语句开始ptr完成加一,所以*(ptr++) +=123;等价于*ptr+=123;ptr+=1;
如果是前加++ptr就表示在运算前就自增了,即*(++ptr)+=123,会修改arr[1]的值为130

这位兄弟你来错地方了!!这种计算机程序题这里没人回答的~~

百度知道 > 社会/文化 > 历史话题......