WEB 开发 开发语言 Java 技术 .Net 技术 数 据 库 硬件使用
图象媒体 Linux/Unix 移动平台 嵌入开发 Windows 专区 软件工程
Ajax 技术 | ASP | PHP | ASP.NET | C# | JSP | Access | Oracle | 网页设计 | Flash | 安全专题 | IIS | VC/MFC | Delphi | C/C++
 你的位置:首页 > 开发语言 > C/C++

函数返回值时为什么要把值放在临时变量里面呢?
[ 来源:ITWENKU 时间:2006-10-27 9:07:35 | 浏览:191人次 ]

函数返回值时为什么要把值放在临时变量里面呢?为什么不能直接复制给变量



为什么没人回答我的问题呢


比如
int fun(int i)
{ int j=i*2;
return j;
}

j是在fun函数内创建的变量,当函数结束时,该变量就释放了,
所以要把变量j的值传递给一个临时变量,通过临时变量赋值给其他变量.


函数返回值时为什么要把值放在临时变量里面呢?为什么不能直接复制给变量
—————————————————————————————————————————
这恐怕是个优化问题。毕竟你说的“复制给变量”仅是函数应用的一部分。


比如:int func(){return 0;}

int i;
i = func();

想要在 func中 return 0;时 将0的值直接复制给 i,那么首先得要知道 i的地址吧~ 不过就目前的信息来看 i的地址 你在 func中无从得知; 所以 将放回值存放到一个临时变量中或者寄存器中,当func执行结束后,程序返回到段口地址 继续执行未完的code~ 也就是 i=func() 这个赋值语句,再将临时存储起来的值复制给i,这样做自然合理


不好说 ,两者皆有可能


更准确一点说:
i=func() 是分两步的;

1.执行func函数得到结果;
2.执行 i=func()这个赋值语句,将结果赋予i;

func 中的ret 语句 和 i=func 赋值语句 之间 处理器还有一些附加的动作要完成~ 不如释放 函数栈~ 转换cs:ip寄存器来指向段口地址,恢复现场等等, 所以ret和 i=func 不可能相继执行~ 所以就更需要 将 func 中要 ret的结果临时保留起来了


保存给临时变量~ 还因为 返回的函数结果可能不付给任何人;

func();

 相关文章
·extern变量的问题
·一个矩阵的问题
·关于vector
·函数调用时如何传递另一个函数啊……
·关于在cmd中文件夹名含有空格该如何处理?
·要把另一台电脑上的硬盘加装到我的电脑上,该怎么办?

 推荐文章
关于高精度乘法的问题
求助c用函数编程
一个关于32位系统的问题
关于堆栈的问题!!!!!
监视哨搜索算法问题
一个矩阵的问题
srting类型的参数传递的问题
请问有什么 c++ design pattern 方面的好书么?
怎样将Turbo C 2.0中的C程序拷贝到 WORD中啊
请说一下 get()函数有什么用.
C++ 中有没现成的函数 可以获得 鼠标所在的某个控件上的整个区域?
我想换个语言用请前辈给点意见
 版权所有:IT问库
copyright © 2006 www.itwenku.cn all rights reserved.