社区
C++ 语言
帖子详情
函数返回值在那里?
arden1019
2005-04-07 01:50:15
好久没有提问了,攒了好多分哈哈,散撒火。
大家来谈谈,这个函数的返回值在那里的问题。
给一个简单的函数
int fn(int a);
ing fn(a){
int ntmp;
ntmp=a+1;
return ntmp;
}
应该是在CPU的那个寄存器中呢?还是内存的那个位置?
如果我用一下 fn(100);
那我怎么知道去哪里找返回值呢??
大大们快畅所欲言啊,小弟先去洗耳朵。
...全文
331
19
打赏
收藏
函数返回值在那里?
好久没有提问了,攒了好多分哈哈,散撒火。 大家来谈谈,这个函数的返回值在那里的问题。 给一个简单的函数 int fn(int a); ing fn(a){ int ntmp; ntmp=a+1; return ntmp; } 应该是在CPU的那个寄存器中呢?还是内存的那个位置? 如果我用一下 fn(100); 那我怎么知道去哪里找返回值呢?? 大大们快畅所欲言啊,小弟先去洗耳朵。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
arden1019
2005-04-08
打赏
举报
回复
好像已经到了尽头?暂时先这样吧,散分回家...
tanjim2002
2005-04-07
打赏
举报
回复
长知识了
dongpy
2005-04-07
打赏
举报
回复
另外补充一个,C++允许给const引用绑定临时对象。
zhousqy
2005-04-07
打赏
举报
回复
学习。
ffrija
2005-04-07
打赏
举报
回复
在VC中,应该是放在EAX寄存器中
dongpy
2005-04-07
打赏
举报
回复
const int& ri = fn(100);
===================================
这种是需要使用返回值的情况,函数返回后,从寄存器中取出数据,放到内存中(产生临时变量),由
ri引用。
返回值在寄存器只是临时的存放,即从被调函数的return开始,到返回调用处。
函数返回后,返回值必须马上转移到内存(或者丢弃),因为寄存器要用来执行指令。
arrowcy
2005-04-07
打赏
举报
回复
那我怎么知道去哪里找返回值呢??
=================================
如果你不用一个变量来接受返回值的话,就基本上找不到了,除非你嵌入汇编
arrowcy
2005-04-07
打赏
举报
回复
按约定,都是放在eax中,如果不按约定放在任何能放数据的地方都可以
积木
2005-04-07
打赏
举报
回复
楼上的,你确定那个引用不是废的?真的能有一个tmp的变量么?
whyglinux
2005-04-07
打赏
举报
回复
至于函数的返回值在那里,这要由编译器根据返回值的类型和具体的调用情况等等因素来决定。幸好对函数的使用者来说,他不需要知道具体的存放位置就可以使用返回值。
再回到题目上来。对于楼主提供的这个fn()函数来说,它的返回是一个int型数。这种情况下一般的处理就是放到寄存器中;但并不总是这样,因为还可能跟调用情况有关。例如下面的例子:
const int& ri = fn(100);
ri是函数返回对象(int型)的常量引用。由于被引用,函数返回对象的生存期得到了延长。显然这种情况下这个函数的返回值就不能始终放在寄存器中了;这时,编译器一般会采取另一种策略:在内存中创建一个无名的临时对象来保存函数的返回值。
以上想法没有经过确认。是不是这样,请大家验证。
kobefly
2005-04-07
打赏
举报
回复
这个看你编译器的实现了啊
vc是放在EAX寄存器中
这个你看一下汇编代码就知道了啊,
arden1019
2005-04-07
打赏
举报
回复
这个话题是不是和 调用协定 Calling Conventions 有关系?
arden1019
2005-04-07
打赏
举报
回复
也就是说在编译器看到函数声明的时候,就知道应该去那里找它的返回值了?
如果是在内存中,是如何得到这个地址的呢?
xiaomin1300
2005-04-07
打赏
举报
回复
这要看具体编译器的设计。对于简单的而且小的返回值,一般放在寄存器,对于复杂的对象
作为返回值的时候,一般通过函数调用栈找到返回值的地址,然后写该地址.
记得thinking in c++ volume 1中说得很清楚的
晨星
2005-04-07
打赏
举报
回复
int result = fn(100);
这样就保存到result变量中去了。
bzCpp
2005-04-07
打赏
举报
回复
X86的机器 小于等于1个字时放在 EAX 中,大于一个机器字小于等于2个字的放在 EDX:EAX中,大于2个字的在栈上开辟一段临时的空间存放返回值,浮点数类型的返回值放在ST0中。
ARM的是返回值放在RO中,其他的机器还没怎么用过。
积木
2005-04-07
打赏
举报
回复
哦,这个问题……
你去看看你的编译器编译出来汇编代码,就知道,返回值在EAX里面了。
还有,如果是16位的机器中,应该是在AX中,赫赫。
自己多观察观察
dongpy
2005-04-07
打赏
举报
回复
如果程序中需要用到int fn(int a);的返回值,如:int i = fn(100);
那么在函数返回后,将累加器EAX中的值,存入变量i。
dongpy
2005-04-07
打赏
举报
回复
int fn(int a);
======================
函数return时,把返回值放在寄存器EAX中。
怎么通过onclick事件获取js
函数
返回值
(代码少)
主要介绍了怎么通过onclick事件获取js
函数
返回值
,需要的朋友可以参考下
log-return:一个用于记录
函数
返回值
的荒谬模块
返回日志 假设你很讨厌,你写的代码是这样的: function mindWarp ( a ) { var b = a * 2 // do stuff return ( { c : b , d : e , f : g } ) } 但是那里有一个错误,你想看看它。 简单的。 npm i return-log 然后: var log = require ( 'return-log' ) function mindWarp ( a ) { var b = a * 2 // do stuff return log ( { c : b , d : e , f : g } ) } 您的
函数
仍然可以执行您想要的操作,现在您可以记录返回
函数
。 这还不够? 看看这些废话。 var a = 19
Python语言程序设计教程 北理工Python课程第6章-
函数
与递归-2-
函数
的调用和
返回值
共19页.pdf
【大纲】 0-1-课程内容和安排介绍 1-1-计算机的概念 1-2-程序设计语言概述 1-3-Python语言 1-4-Python开发环境配置 1-5-基本程序设计方法 1-6-理解问题的计算部分 1-7-温度转换程序实例 2-1-Python程序元素分析 2-2-程序编写模板 2-3-turtle库和蟒蛇绘制程序 2-4-蟒蛇绘制程序分析 2-5-
函数
库的引用 3-1-Python中类型的概念 3-2-数字类型 3-3-字符串类型 3-4-字符串的操作 3-5-元组类型 3-6-列表类型及操作 3-7-math库和random库 3-8-π的计算 4-1-1-程序基本结构 4-1-2-简单分支 4-1-3-多分支 4-1-4-异常处理设计 4-1-5-三者最大实例分析 4-2-1-基本循环结构 4-2-2-通用循环构造方法 4-2-3-死循环半路循环 4-2-4-布尔表达式 6-1-1-文件的基础 6-1-2-文件的基本处理 6-1-3-文件实例一 6-1-4-文件实例二 6-2-1-字典的基础 6-2-2-字典的操作 6-2-3-字典实例一 6-2-4-字典实例二 7-3-1-计算思维 7-3-2-自顶向下的设计 7-3-3-自底向上的执行 7-3-4-软件工程 7-3-5-敏捷开发方法 7-4-1-面向过程的程序设计 7-4-2-面向对象的程序设计 7-4-3-基本例子 7-4-4-面向对象的特点 8-6-1-基本介绍 8-6-2-图形对象概念 8-6-3-交互式图形用户接口 8-6-4-图形库的应用方法 8-6-5-Turtle库介绍 8-6-6-图形用户接口实例 8-6-7-Turtle实例 8-6-8-Turtle Art 第6章-
函数
与递归-1-
函数
定义 第6章-
函数
与递归-2-
函数
的调用和
返回值
第6章-
函数
与递归-3-改变参数值的
函数
第6章-
函数
与递归-4-程序结构和递归 第6章-
函数
与递归-5-
函数
实例
C/C++ :
函数
返回值
为结构体,以及返回指针
目录C语言中
函数
如何返回结构体?C语言
函数
返回结构体的方法:typedef使用标准符号从
函数
中返回结构体:指针。
C语言内存分配及
函数
返回值
的解析。
C语言的内存分配主要如下: (1)栈区:在执行
函数
时,
函数
内局部变量(不包含static变量)、
函数
返回值
的存储单元在栈区上创建,
函数
执行结束时这些存储单元自动被释放。栈区内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (2)堆区:即动态分配内存分配,程序在运行时用malloc(calloc,realloc等)申请的内存,程序员自己负责用free释放内存。 (3)
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章