Я программировал c/C++ в течение многих лет, но сегодняшнее случайное открытие заставило меня несколько любопытно ... Почему оба выхода дают одинаковый результат в коде ниже? (arr
, конечно, адрес arr[0]
, то есть указатель на arr[0]
я ожидал бы &arr
быть адрес этого указателя, но он имеет такое же значение, как arr
.)Почему arr и & arr то же самое?
int arr[3];
cout << arr << endl;
cout << &arr << endl;
Примечание: Этот вопрос был закрыт, но теперь он снова открывается. (Спасибо?)
Я знаю, что &arr[0]
и arr
оценивает и тот же номер, но это не мой вопрос! Вопрос в том, почему &arr
и arr
оценивает одно и то же число. Если arr
является литералом (не хранится в любом случае), тогда компилятор должен жаловаться и сказать, что arr
не является значением lvalue. Если адрес arr
хранится где-то, то &arr
должен указать мне адрес этого места. (Но это не так)
если я пишу
константный Int * arr2 = обр;
arr2[i]==arr[i]
тогда для любого целого i
, но .
Что означает «адрес этого указателя»? Указатель не сохраняется в переменной. –
@David Schwartz, Если бы я написал int * arr2 = new int [3], то & arr2 было бы сохранено в переменной. Может быть, arr - буквальная константа? Но если взять адрес константы (например, & 123), то компилятор жалуется (123 не является lvalue). Компилятор не жаловался, когда я взял адрес arr. – ragnarius
Я не думаю, что это дубликат! – ragnarius