при попытке напечатать адрес ошибки [1]: lvalue требуется при появлении унарного операнда '&' - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь распечатать адрес элемента a [1]. Я знаю, что это может быть достигнуто

cout << a[i];

но я просто хочу знать, почему я получаю сообщение об ошибке при этом

cout << &(a+1);

#include <iostream>
using namespace std;

int main()
{
    int array[10];
    array[1]=3;
    cout<<"Address : "<<&(array+1);
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Неформально говоря, array + 1 не существует как переменная (например, вы не можете установить для нее другое значение), поэтому вы не можете получить ее адрес. Более формально lvalue требуется; то есть что-то, что может быть установлено в значение.

Следовательно, &(array + 1) выдает ошибку компиляции: в вашем случае есть несколько полезных советов.

Вы хотели просто array + 1 для адреса, следующего за array в арифметике указателей? При оценке array + 1, array распадается до int* типа.

0 голосов
/ 12 января 2019

Для любого массива указателей a и индекса i выражение a[i] равно точно и равно *(a + i). Из этого можно сделать вывод, что a + i является указателем, равным &a[i].

Итак, когда вы пытаетесь сделать &(a + 1), это действительно равно &&a[1], что не имеет смысла и выдает ошибку.

...