问一个关于返回值的问题

清萍山人 2015-07-28 10:25:50
#include <stdio.h>
int main()
{
int latitude = 32 ;
go_south_east(latitude);
printf("当前位置: [%i]\n",latitude);
return 0;
}
int go_south_east(int lat)
{
lat = lat - 1;
return lat;
}

我不是已经把函数中lat的值作为返回值返回了么,为什么最后的结果还是32呢?
调用函数时候用指针的话可以解决这个问题,可是我没想明白为什么。
...全文
82 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
清萍山人 2015-07-29
  • 打赏
  • 举报
回复
感谢各位的回答 问题已解决 就此结帖。
u014198567 2015-07-28
  • 打赏
  • 举报
回复
调用函数,被调用函数,实参,形参你应该都清楚吧,这个就不解释其定义了; 看下你代码: #include <stdio.h> int main() { int latitude = 32 ; go_south_east(latitude); printf("当前位置: [%i]\n",latitude); return 0; } int go_south_east(int lat) { lat = lat - 1; return lat; } 你这里在主函数中调用函数int go_south_east()并将latitude作为实参传递给形参lat,属于值传递,在这个值传递的过程中,发生了以下事情:形参lat是一个局部变量,存储在栈中,接收的值为实参latitude的值,那么请你思考一下两个变量latitude和lat存储在内存中的地址是否相同?说白了是不是指向同一内存空间? 答案是:不是;不信你打印他们地址看一看,明白了这个就好理解其他的,另个存储在不同内存空间中的两个变量,你改变其中一个变量的值对另外一个有影响吗?肯定没有啊; 再来说说你返回lat,麻烦问一下,你返回lat作为被调用函数的返回值,可主函数中有接受返回值的变量吗?你都没有变量接受那么这个值肯定丢掉了啊; 你可以改成这样看看 latitude= go_south_east(latitude);
lotusyear 2015-07-28
  • 打赏
  • 举报
回复
楼主你调用函数的时候,使用的参数传递方式是值传递,所以实参是不会受形参的修改而改变的。 另外,你在被调用的函数中是用返回值来表示结果的,所以如果你想得到结果应该用楼上的方式,把返回值保存下来再用。
苏叔叔 2015-07-28
  • 打赏
  • 举报
回复
把返回值接收下,就行,如 latitude = go_south_east(latitude);
wang0635 2015-07-28
  • 打赏
  • 举报
回复
1楼的是c++代码,不是c 楼主再仔细看看c语言参数传递那一部分吧
清萍山人 2015-07-28
  • 打赏
  • 举报
回复
@GKatHere 我不是很明白 能详细说一下么
GKatHere 2015-07-28
  • 打赏
  • 举报
回复

int go_south_east(int& lat)

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧