鱼C论坛

 找回密码
 立即注册
查看: 1948|回复: 7

[已解决]形参传递

[复制链接]
发表于 2017-9-21 23:20:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//有如下程序
#include   <stdio.h>
int convert(int*  data)
{
    return (*data) ++;
}
main( )
{
    int  data = 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?*/
最佳答案
2017-9-24 15:20:23
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;
    int  data = 56;
    convert(&data);
    printf("%d,", data);
    d = convert(&data);//这之后data为58
    printf("%d,%d\n", data, d);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-9-21 23:23:07 | 显示全部楼层
【解析】convert函数每次都定义了一个指针*data,再将指针变量*data对应地址的值进行加一处理,再返回加1前的值作为结果,因此答案为C选项。
答案是这个,但是想不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 08:31:56 | 显示全部楼层
本帖最后由 Krant5 于 2017-9-22 08:37 编辑

第二个操作也就是  data =convert(&data)
等效于  data = return (*data)++
返回值为57 先存储到临时变量中,随后 (*data)++  ,data 为58 ;然后将临时变量57 赋值给 data;结果为57
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 09:09:20 | 显示全部楼层
解析里有一句话:返回加1前的值作为结果。
按照我的理解,后置自增自减运算符具有滞后性,就是说一开始到这个算式能计算,但是值不会变化,等下一次用到这个值才会变化。第一次调用函数返回的还是56,但是在打印的时候用到了data,所以值就会显示出计算后的值57;第二次调用返回57,但是直接赋值给了data,没有给它改变自身的机会,所以答案就是C。
你先理解下,可能我说的也不一定对,但是按照解析里的话应该是这个意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-23 11:45:10 | 显示全部楼层
我也是看不懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-24 15:20:23 | 显示全部楼层    本楼为最佳答案   
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;
    int  data = 56;
    convert(&data);
    printf("%d,", data);
    d = convert(&data);//这之后data为58
    printf("%d,%d\n", data, d);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-25 22:11:50 | 显示全部楼层
Krant5 发表于 2017-9-22 08:31
第二个操作也就是  data =convert(&data)
等效于  data = return (*data)++
返回值为57 先存储到临时变量 ...

第一个呢?这样说第一个就是56咯,但是两个都是57
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-25 22:16:28 | 显示全部楼层
烙尘 发表于 2017-9-25 22:11
第一个呢?这样说第一个就是56咯,但是两个都是57

sorry,仔细看了下,懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-30 19:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表