问题描述
- C语言题程序第二个输出结果是124还是125呢?求大侠帮忙解释
- #include
int change(int *data)
{ return (*data)++;}
main()
{ int data=123;
change(&data);
printf(""%ddata);
data=change(&data);
printf(""%d""data);
printf(""n"");}
VC++里程序运行结果为:124124----第二个输出结果不是应该为125吗?为何是124呢?求解答
解决方案
change(&data); 使data加1,
但是{ return (*data)++;}
在函数内是返回data之后,再将data加1的,即data是加1了,可是返回值还是原来的值。
所以,data又被赋回了原来的值。
如果要输出124,125,那么把{ return (*data)++;}改成{ return ++(*data);}即可。
解决方案二:
其实,就是要注意这两句:
change(&data);
data=change(&data);
第二句的赋值,导致函数体内的 ++ 的运行结果,被函数返回值覆盖了。
解决方案三:
结果是124 124
你修改指针不会作用到实参上
解决方案四:
#include <stdio.h>int change(int* data){ return ++(*data);}main(){ int data=123; change(&data); printf(""%ddata); data=change(&data); printf(""%d""data); printf(""n"");}
这样是124 125
解决方案五:
以上程序的运行结果应该是:123 124
a++,是先返回 a 的值,再 a 自加一。
解决方案六:
(*data)++;是先用再自加,所以chang()返回的是没有增加的值,然后又把这个值赋值给了data,所以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
时间: 2024-08-03 21:04:25