| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 838 人关注过本帖
标题:关于函数返回引用的问题
取消只看楼主 加入收藏
tao12345
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-9-1
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
关于函数返回引用的问题
我刚接触C++,但是关于函数反馈一个引用老是不能够理解,函数返回的引用是谁的引用?
例如下面的这个程序,函数f返回了一个引用temp,那么temp是谁的引用?
#include "iostream"

int main()
{int i=5;
 int& f(int);
 int n=f(i);
 std::cout<<n<<std::endl;
    return 0;
}

int& f(int x)
{
    int temp;
    temp=x*x;
    return temp;
}
搜索更多相关主题的帖子: include 
2013-09-01 07:53
tao12345
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-9-1
收藏
得分:0 
回复 2楼 peach5460
什么叫未定义行为?
这个程序是能够运行的,我想问的是,这个程序的子函数,返回的是temp值,而根据函数的定义,返回值是一个引用,即temp是个引用,那么temp是谁的引用?
2013-09-01 20:38
tao12345
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-9-1
收藏
得分:0 
回复 5楼 peach5460
谢谢,请教了其他的人,他们给我这样解释的,但是仍有疑问,请再帮我看看行吗?谢谢!

1 temp是子函数定义的一个临时变量,用来存储fun函数计算的结果;
2 实际上,函数在运行的时候,参加运算的参数是放在堆栈中的,(假如说这个运算是一个复杂的函数),每运行一次函数的原型结果会放在栈顶,该结果会成为下一步运算的一个因数,直到函数运行完毕;
3 2中最后一次运行的结果会放在堆栈中,程序会自动设定一个隐藏的临时变量表示,然后再将此临时变量传递给temp,temp实际是临时变量的引用;
4 但temp的结果返回到主函数以后,temp的内存(也即临时变量的栈中的内存)将会被释放,但是如果按照这种解释,下面的程序又解释不了?

#include "iostream"

int main()
{   int n=2;
    int f(int);
    f(n);
    std::cout<<f(n)<<std::endl;
    return 0;

}

int f(int i)
{
    int temp;
    temp=i*i;
    std::cout<<&temp<<std::endl;
    return temp;
}

运行结果为:
0012FF20
0012FF1C
4
2013-09-02 19:35
tao12345
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-9-1
收藏
得分:0 
回复 4楼 TonyDeng
高手,那你帮忙看一下下面的程序的运行结果为什么这么奇怪?我要输出temp的地址值,但是为什么输出了两个地址值?请问是为什么?

#include "iostream"

int main()
{   int n=2;
    int f(int);
    f(n);
    std::cout<<f(n)<<std::endl;
    return 0;

}

int f(int i)
{
    int temp;
    temp=i*i;
    std::cout<<&temp<<std::endl;
    return temp;
}

运行结果为:
0012FF20
0012FF1C
4
2013-09-02 19:41
快速回复:关于函数返回引用的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021491 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved