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)
我知道它仅返回该索引的常量,并且我们无法更改常量。因此,有某种方法可以修改此函数以获取对数组元素的完全访问权限,从而能够更改指定索引上的值。
只需更改函数即可返回引用。更改此:
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]并且该副本没有地址,它在语句末尾消失了。