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

cas*_*per 2 c++ arrays pointers

假设我有一个数组

int x[5] = {1,2,3,4,5}; 
Run Code Online (Sandbox Code Playgroud)

和功能

   int at(int p[],const int i){
   return p[i];
   }
Run Code Online (Sandbox Code Playgroud)

我正在尝试访问诸如

cout << at(x,4);//works fine,output is 5  
cin >> at(x,3);// error  
Run Code Online (Sandbox Code Playgroud)

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

Bla*_*aze 7

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

int at(int p[],const int i){
Run Code Online (Sandbox Code Playgroud)

对此:

int &at(int p[], const int i) {
Run Code Online (Sandbox Code Playgroud)

我知道它仅返回该索引的常量,并且我们无法更改常量。

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