【问题标题】:How can a reference variable be returned into a function?如何将引用变量返回到函数中?
【发布时间】:2016-01-19 08:44:17
【问题描述】:
#inlcude<iostream>
using namespace std;

int & change(int);
int a[5]={10,20,30,40,50};
int main()
{
       int i;
       for(i=0;i<5;i++)
           change(i)=a[i]+5;

       for(i=0;i<5;i++)
           cout<<"   "<<a[i]<<endl;
}

int & change(int i)
{
        return a[i];
}

它有效。我们如何才能对左侧起作用?为什么它没有给我错误 lvalue is required?

请解释一下它是如何工作的以及引用变量如何在函数中返回?

【问题讨论】:

  • 您认为是什么问题? change(i) 产生一个对 int 的引用,你可以分配给一个引用就好了。
  • 它像指针一样工作吗?
  • 您的介绍性书籍中应包含参考资料。
  • 返回类型其实是一个左值。非常量引用只能绑定到左值,而您正在绑定到数组访问,这是一个左值。

标签: c++ arrays variables reference


【解决方案1】:

这里,change(i) 通过引用返回 int 类型的值。

在 C++ 中通过引用返回值

使用引用而不是指针(没有分段错误)可以使 C++ 程序更易于阅读和维护。 C++ 函数可以以与返回指针类似的方式返回引用。

当一个函数返回一个引用时,它会返回一个指向其返回值的隐式指针。这样,可以在赋值语句的左侧使用函数。所以change(i)=a[i]+5; 是一个可以接受且正确的说法。

然而,指针和引用之间的主要区别是引用不能是NULL,而指针可以。引用必须在声明时进行初始化。

int i;
int &j = i;      // Acceptable
int &k;          // Not Acceptable
int &l = NULL;   // Not Acceptable
int *p = NULL;   // Acceptable
int *p1 = &i;    // Acceptable

【讨论】:

    【解决方案2】:

    你正在返回一个左值。

    非常量引用只能绑定到左值。您正在返回对内存中数组的引用。那是一个左值。所以它起作用了。

    这行不通:

    int & change(i) {
        return 7;
    }
    

    7 没有内存地址,它是一个常数。它不会绑定到返回类型。

    【讨论】:

      【解决方案3】:

      您的数组包含对值的引用。您的 change(i) 返回值的引用,并在您修改后

      【讨论】:

      • 数组不包含对值的引用。您可以检索对值的引用。
      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2012-05-19
      • 2011-01-01
      相关资源
      最近更新 更多