C++函数返回引用问题

c++书上有
#include<iostream>
using namespace std;
int a[]={1,3,5,7,9};
int main()
{
index(2)=25;
cout<<index(2);
return 0;
}
int &index(int i)
{
return a[i];
}
根本就不能编译啊。。
为什么。。
还有什么是返回引用啊 ,什么时候要用返回引用?

在main中开头加一句int &index(int);,或者把函数index的定义提前到main前面就行了……C/C++规定所有变量和函数必须先声明后引用,前述两种方法都是在进行函数index的声明,而写在main后面的函数被认为是没有声明过的,所以你编译不过。“引用”是C++的一种类型,它是某个变量的别名,比如int a,&p=a;这就是给a又起了个名字叫p,使用p和使用p就是一样的了。C++为“引用“赋于了新的内涵:当函数的形式参数使用“引用类型”时,函数内对“引用”的操作可以改变原变量的值,而用变量类型作形式参数时是拷贝传值,没有这种优势。返回”引用“的函数在函数名前加一个&,再前面是类型名,比如int &index()是返回一个int型“引用”,因为“引用”是int型某变量的别名,所以返回值可以直接赋给int型变量。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-12
#include<iostream>
using namespace std;
int a[]={1,3,5,7,9};

int &index(int i)
{
return a[i];
}
int main()
{ index(2)=25;
cout<<index(2);
return 0;}

1.先要定义函数 index(), 之后才能调用; 放前面就可以了,我已试过!
2. 引用作为返回值 很少这么用法,这是C++的令人费解的地方,
引用就是以地址表示单元的一种变量,返回引用就相当于返回一个单元,
用来做赋值语句的左值,一般人很难理解噢。
index(2)=2 ;
左边称左值 ,表示 全局数组单元 a[2],相当于 a[2]=2;
这种“引用”其它计算机语言都没有这种功能。本回答被提问者和网友采纳
第2个回答  2013-05-12
#include<iostream>
using namespace std;
int a[]={1,3,5,7,9};
int &index(int i);//这里需要申明一下 否则main不能调用index函数
int main()
{
     index(2)=25;
     cout<<index(2);
     return 0;
}
int &index(int i)
{
    return a[i];
}

返回引用:

1)主函数main的返回值:这里提及一点,返回0表示程序运行成功。

2)返回非引用类型:函数的返回值用于初始化在跳用函数出创建的临时对象。用函数返回值初始化临时对象与用实参初始化形参的方法是一样 的。如果返回类型不是引用,在调用函数的地方会将函数返回值复制给临时对象。且其返回值既可以是局部对象,也可以是求解表达式的结果。

3)返回引用:当函数返回引用类型时,没有复制返回值。相反,返回的是对象本身。

第3个回答  2013-05-12
int &index(int i)
{
return a[i];
}

bug bug bug
不能返回临时变量的引用

c++函数的返回值类型---引用&非引用
c++函数返回值类型:引用与非引用的区别在c++中,函数的返回值类型有明显区分,主要分为返回非引用类型和返回引用类型。两种方式在处理数据时有着显著的不同。1. 返回非引用类型 当你调用一个函数并期望函数返回一个新的对象或值时,它通常会返回非引用。这种方式下,函数创建了一个新的对象并将其值返...

c++ 函数返回引用问题
首先,永远不要返回局部变量的引用。因为局部变量在函数返回时被回收,即这个变量不存在了,所以以后对这个变量的引用都是无意义的,结果是不可预知的,程序很可能会崩溃。因此,也就不解释这种情形的结果了。由于静态变量的声明周期直到程序结束,所以返回静态变量的引用是有意义的,而且安全的。下面解释返...

c++返回引用的问题
对于函数的返回值,如果不是引用,那么只是暂时性的,举个例子,一个函数返回了一个int变量,那么当这个变量返回给外部使用后,这个变量的内存就立刻被系统回收了,也就是说这个值再也不存在了。如果返回一个类的对象的话,建议还是把返回值写成引用的形式,这样做有两个好处,第一个是保证了返回的类...

C++返回引用的问题
这里不需要返回引用 如你写的,函数调用结束后,函数栈会被销毁,引用不到了 例子:函数返回值(int Func1())时,要产生一个临时变量作为函数返回值的副本(保存该函数调用中要返回的值),而用引用返回值(int &Func2())时,不产生值的副本。故在用函数返回值定义一个引用(int &ia = Func1...

C++函数返回引用问题
C++为“引用“赋于了新的内涵:当函数的形式参数使用“引用类型”时,函数内对“引用”的操作可以改变原变量的值,而用变量类型作形式参数时是拷贝传值,没有这种优势。返回”引用“的函数在函数名前加一个&,再前面是类型名,比如int &index()是返回一个int型“引用”,因为“引用”是int型某变量...

C++中返回引用的作用是什么?没有&就是不引用也没多大问题吧?
不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了“无所指”的引用,程序会进入未知状态。不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item 31。虽然不存在局部变量的被动销毁问题,可对于...

C++ 返回值 引用
引用引用的也是地址,cout<<语句会将地址重新定向,所以返回的地址就不再是引用原来那个值了。就会出现一个奇怪的值。(我执行结果是b:4198699)可以用两个改进办法,一个是把那两句int& f(int &a);改成int f(int &a);这样返回的是值而不是引用,就不会错了。第二个是把子函数里 int c;改...

c++ 返回引用问题
1错2对,引用类似于指针,其实是个地址类的变量。函数中的局部变量其实是在调用栈上分配的,当函数返回时,调用栈中的数据还没被覆盖。所以 int b=fun(); 是可接受的,因为在函数局部变量的数据还没被覆盖时,就通过引用把局部数据赋值给了b. (但这是个不推荐的东东,高手的游戏,初学者慎用)i...

C++返回引用类型
& fun() { int a; a=10; return a; } 这样是不行的,因为a会在fun退出时被销毁,这时返回的a的引用是无效的。这种情况下,如果fun的返回类型不是int & 而是int就没有问题了。因此,要返回一个引用时,“临时变量”不能是“临时”的,至少得等函数外部使用完毕这个引用之后,才能销毁它。

请教c++返回引用问题
第一个程序段主函数中:int &b=B(a);第二个程序段主函数中:int b=B(a);问题就出在这里,第一个b是a的引用,当修改b的值时a的值也改变了。而第二个b是整形变量,系统为它开辟内存空间,修改它的值时a值并不会改变。

相似回答