Изменение значения массива с помощью вызова функции - PullRequest
2 голосов
/ 28 июня 2019

Предположим, у меня есть массив

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 Ответ

7 голосов
/ 28 июня 2019

Просто измените функцию, чтобы вместо нее вернуть ссылку.Измените это:

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

На это:

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

Я знаю, что возвращается только константа этого индекса, и мы не можем изменить константы.

Это не проблема.Проблема в том, что если функция возвращает только int, то вы возвращаете значение r.cin >> однако требует lvalue, который является объектом, который хранится в идентифицируемом месте в памяти.x[3] такой lvalue, и, возвращая ссылку на это, мы возвращаем такое lvalue.Просто вернув int, мы бы вернули только копию значения в x[3], и эта копия не будет иметь адреса, она исчезнет в конце оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...