形参传递
//有如下程序#include <stdio.h>
int convert(int*data)
{
return (*data) ++;
}
main( )
{
intdata = 56;
convert(&data);
printf("%d,", data);
data = convert(&data);//这里data=58
printf("%d,\n", data);//为什么这里data=57?
}
/*程序运行后的输出结果是
A) 56,57,
B)57,58,
C) 57,57,
D)55,57,
为什么第二个输出是57?*/
【解析】convert函数每次都定义了一个指针*data,再将指针变量*data对应地址的值进行加一处理,再返回加1前的值作为结果,因此答案为C选项。
答案是这个,但是想不明白 本帖最后由 Krant5 于 2017-9-22 08:37 编辑
第二个操作也就是data =convert(&data)
等效于data = return (*data)++
返回值为57 先存储到临时变量中,随后 (*data)++,data 为58 ;然后将临时变量57 赋值给 data;结果为57 解析里有一句话:返回加1前的值作为结果。
按照我的理解,后置自增自减运算符具有滞后性,就是说一开始到这个算式能计算,但是值不会变化,等下一次用到这个值才会变化。第一次调用函数返回的还是56,但是在打印的时候用到了data,所以值就会显示出计算后的值57;第二次调用返回57,但是直接赋值给了data,没有给它改变自身的机会,所以答案就是C。
你先理解下,可能我说的也不一定对,但是按照解析里的话应该是这个意思{:10_245:} 我也是看不懂啊 convert函数的作用是返回data的值,然后给data加1
main函数中,使用了一次convert之后,data变为57
下一次执行convert的时候因为把返回值赋给了data,
所以此时的data是57
如果没有赋值语句,则data的值会变成58
可以使用如下代码验证
//有如下程序
#include <stdio.h>
int convert(int*data)
{
return (*data) ++;
}
main( )
{ int d;
intdata = 56;
convert(&data);
printf("%d,", data);
d = convert(&data);//这之后data为58
printf("%d,%d\n", data, d);
} Krant5 发表于 2017-9-22 08:31
第二个操作也就是data =convert(&data)
等效于data = return (*data)++
返回值为57 先存储到临时变量 ...
第一个呢?这样说第一个就是56咯,但是两个都是57 烙尘 发表于 2017-9-25 22:11
第一个呢?这样说第一个就是56咯,但是两个都是57
sorry,仔细看了下,懂了
页:
[1]