通过函数调用更改数组的值

时间:2019-06-28 11:31:26

标签: c++ arrays pointers

假设我有一个数组

int x[5] = {1,2,3,4,5}; 

还有一个功能

   int at(int p[],const int i){
   return p[i];
   }

我正在尝试访问

之类的元素
cout << at(x,4);//works fine,output is 5  
cin >> at(x,3);// error  

我知道它仅返回该索引的常量,我们无法更改常量。因此,有某种方法可以修改此函数以获取对数组元素的完全访问权限,从而能够更改指定索引上的值。

1 个答案:

答案 0 :(得分:7)

只需将函数更改为返回引用即可。更改此:

int at(int p[],const int i){

对此:

int &at(int p[], const int i) {
  

我知道它仅返回该索引的常量,而我们不能   更改常量。

那不是问题。问题是,如果函数仅返回int,则返回的是右值。 cin >>但是需要一个左值,它是一个对象,存储在内存中的可识别位置。 x[3]就是这样的lvalue,并且通过返回对它的引用,我们正在返回这样的左值。仅返回一个int,我们将只返回x[3]中值的一个副本,而该副本没有地址,它在语句末尾消失了。