#include
int change(int *data)
{ return (*data)++;}
main()
{ int data=123;
change(&data);
printf("%d,",data);
data=change(&data);
printf("%d",data);
printf("\n");}
VC++里程序运行结果为:124,124----第二个输出结果不是应该为125吗?为何是124呢?求解答
change(&data); 使data加1,
但是{ return (*data)++;}
在函数内是返回data之后,再将data加1的,即data是加1了,可是返回值还是原来的值。
所以,data又被赋回了原来的值。
如果要输出124,125,那么把{ return (*data)++;}改成{ return ++(*data);}即可。
结果是124 124
你修改指针不会作用到实参上
#include <stdio.h>
int change(int* data)
{ return ++(*data);}
main()
{ int data=123;
change(&data);
printf("%d,",data);
data=change(&data);
printf("%d",data);
printf("\n");}
这样是124 125
以上程序的运行结果应该是:123 124
a++,是先返回 a 的值,再 a 自加一。
(*data)++;是先用再自加,所以chang()返回的是没有增加的值,然后又把这个值赋值给了data,所以data无变化。
其实,就是要注意这两句:
change(&data);
data=change(&data);
第二句的赋值,导致函数体内的 ++ 的运行结果,被函数返回值覆盖了。
第二次调用change()函数,首先保存临时变量124,然后对data的内容加1,这时全局data中的内容是125。然后change()函数返回保存的临时变量124。main()中将返回值赋值给data。这时全局data又变成124。因此第二个结果为124
return (*data)++ 的顺序是先返回data的值,再执行data++,第一次调用函数时,函数的值为123,data的值变124,第二次调用函数时,函数的值为124,data的值为125,而此时执行data=change(&data),则第二次返回的函数值赋给data,所以data的值变为124