Форум программистов, компьютерный форум CyberForum.ru

Почему нельзя обратиться к адресу с помощью & в массивах? - C++

Восстановить пароль Регистрация
 
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
04.02.2014, 17:56     Почему нельзя обратиться к адресу с помощью & в массивах? #1
Почему нельзя обратиться к адресу с помощью & в массивах;
Например:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
int main(){
 int* x, y[5]={1,2,3,4,5};
 x=y;                            //   почему не x=&y    ?
 cout << x<<" "<<*x;
 return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
04.02.2014, 18:03     Почему нельзя обратиться к адресу с помощью & в массивах? #2
Имя массива само по себе является константным указателем на нулевой элемент (грубо говоря)
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
04.02.2014, 18:05     Почему нельзя обратиться к адресу с помощью & в массивах? #3
Просто у - это указатель на начало массива, потому указателю присваиваете указатель. Всё нормально, всё по правилам.

Добавлено через 1 минуту
Вот х = у[1] - уже будет ошибка.
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
04.02.2014, 18:16  [ТС]     Почему нельзя обратиться к адресу с помощью & в массивах? #4
Цитата Сообщение от Тамика Посмотреть сообщение
Просто у - это указатель на начало массива, потому указателю присваиваете указатель. Всё нормально, всё по правилам.

Добавлено через 1 минуту
Вот х = у[1] - уже будет ошибка.
х = &у[1] это наверное не будет уже ошибкой
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
04.02.2014, 18:18     Почему нельзя обратиться к адресу с помощью & в массивах? #5
Верно. Тогда х будет хранить адресс ячейки, в которой лежит элемент массива с индексом 1.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.02.2014, 18:23     Почему нельзя обратиться к адресу с помощью & в массивах? #6
Цитата Сообщение от PriZrаK Посмотреть сообщение
почему не x=&y
в сях, кстати, работают оба варианта.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
04.02.2014, 18:27     Почему нельзя обратиться к адресу с помощью & в массивах? #7
del
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.02.2014, 18:28     Почему нельзя обратиться к адресу с помощью & в массивах? #8
Цитата Сообщение от daslex Посмотреть сообщение
Вы пытаетесь переписать адрес x значением адреса y, а это физически невозможно.
штоа?
Цитата Сообщение от daslex Посмотреть сообщение
можно брать адрес, можно на него ссылаться, но нельзя его поменять.
где у ТС попытка изменить y?
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
04.02.2014, 18:51     Почему нельзя обратиться к адресу с помощью & в массивах? #9

Не по теме:

я до ответа удалил. и изменить физ.адрес x значением y писал я, а не наоборот. (ко второму вопросу пояснил).


но, в с++ не работают оба

Добавлено через 13 минут
x=y ==> Положить по адресу x "трамплин" к началу массива y,
x=&y ==> Попытка присвоить адрес в адрес (что физически не может быть сделано),
x=*(&y),x=&(*y) - без разницы как, ложим трамплин к адресу начала массива y
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 20:13     Почему нельзя обратиться к адресу с помощью & в массивах?
Еще ссылки по теме:

C++ Почему в switch нельзя определять переменные?
Инкремент указателей и как обратиться к "промежуточному" адресу переменной C++
Почему в выражении нельзя использовать запятую вместо && C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
04.02.2014, 20:13     Почему нельзя обратиться к адресу с помощью & в массивах? #10
y имеет тип int[5], который может быть неявно приведён к int*.
&y имеет тип int(*)[5], который в C может быть неявно приведён к int*, а в C++ - только явно.
Yandex
Объявления
04.02.2014, 20:13     Почему нельзя обратиться к адресу с помощью & в массивах?
Ответ Создать тему
Опции темы

Текущее время: 23:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru