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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
PriZrаK
-116 / 0 / 1
Регистрация: 28.01.2014
Сообщений: 144
#1

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

04.02.2014, 17:56. Просмотров 307. Ответов 9
Метки нет (Все метки)

Почему нельзя обратиться к адресу с помощью & в массивах;
Например:
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 17:56     Почему нельзя обратиться к адресу с помощью & в массивах?
Посмотрите здесь:

Почему таким способом нельзя создать массив? C++
Как в связном списке обратиться к элементу по адресу C++
Почему обращение к недоступному адресу в памяти C++
Объясните почему не срабатывает И (&&) C++
Почему нельзя объявить динамический массив глобально C++
C++ Почему break нельзя использовать в if?
C++ Почему в switch нельзя определять переменные?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2444 / 1616 / 236
Регистрация: 24.11.2012
Сообщений: 3,967
04.02.2014, 18:03     Почему нельзя обратиться к адресу с помощью & в массивах? #2
Имя массива само по себе является константным указателем на нулевой элемент (грубо говоря)
Тамика
Котовчанин
 Аватар для Тамика
866 / 446 / 132
Регистрация: 16.02.2010
Сообщений: 2,665
Записей в блоге: 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] это наверное не будет уже ошибкой
Тамика
Котовчанин
 Аватар для Тамика
866 / 446 / 132
Регистрация: 16.02.2010
Сообщений: 2,665
Записей в блоге: 27
04.02.2014, 18:18     Почему нельзя обратиться к адресу с помощью & в массивах? #5
Верно. Тогда х будет хранить адресс ячейки, в которой лежит элемент массива с индексом 1.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.02.2014, 18:23     Почему нельзя обратиться к адресу с помощью & в массивах? #6
Цитата Сообщение от PriZrаK Посмотреть сообщение
почему не x=&y
в сях, кстати, работают оба варианта.
daslex
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,479
04.02.2014, 18:27     Почему нельзя обратиться к адресу с помощью & в массивах? #7
del
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.02.2014, 18:28     Почему нельзя обратиться к адресу с помощью & в массивах? #8
Цитата Сообщение от daslex Посмотреть сообщение
Вы пытаетесь переписать адрес x значением адреса y, а это физически невозможно.
штоа?
Цитата Сообщение от daslex Посмотреть сообщение
можно брать адрес, можно на него ссылаться, но нельзя его поменять.
где у ТС попытка изменить y?
daslex
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,479
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++
Почему нельзя подставлять переменные в выражения #if #else? C++
C++ Почему нельзя написать просто - using namespace boost;
C++ Почему два char нельзя сравнивать так ==?
C++ Почему нельзя выделить статически кусок в ~100 MB?

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

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

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