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

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

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

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

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

Почему в выражении нельзя использовать запятую вместо && - C++
Привет всем, у меня такой вопрос: Почему в выражении for (i=0; i &lt; *k &amp;&amp; strcmp((base+i)-&gt;fam,fam); i++); вместо &quot;&amp;&amp;&quot;...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

Как в связном списке обратиться к элементу по адресу - C++
как в связном списке обратиттся к элементу по нужному адресу? Добавлено через 46 минут как в связном списке обратится к нужному...

Объясните почему не срабатывает И (&&) - C++
Есть задача нахождения наибольшего общего делителя для двух чисел. Программу я написал.Но почему когда я указывал в цикле И (&amp;&amp;), цикл...

Инкремент указателей и как обратиться к "промежуточному" адресу переменной - C++
Доброго времени суток! Пусть указатель указывает на адрес переменной типа int. Переменная типа int занимает 4 байта (пускай она...

Почему break нельзя использовать в if? - C++
почему break нельзя использовать в if вот код if(f.eof()==1) { break; } про break MVS говорит что ОПЕРАТОР break...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
0x10
2463 / 1635 / 238
Регистрация: 24.11.2012
Сообщений: 4,026
04.02.2014, 18:03 #2
Имя массива само по себе является константным указателем на нулевой элемент (грубо говоря)
0
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,976
Записей в блоге: 27
04.02.2014, 18:05 #3
Просто у - это указатель на начало массива, потому указателю присваиваете указатель. Всё нормально, всё по правилам.

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

Добавлено через 1 минуту
Вот х = у[1] - уже будет ошибка.
х = &у[1] это наверное не будет уже ошибкой
0
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,976
Записей в блоге: 27
04.02.2014, 18:18 #5
Верно. Тогда х будет хранить адресс ячейки, в которой лежит элемент массива с индексом 1.
0
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.02.2014, 18:23 #6
Цитата Сообщение от PriZrаK Посмотреть сообщение
почему не x=&y
в сях, кстати, работают оба варианта.
0
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,677
04.02.2014, 18:27 #7
del
0
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
04.02.2014, 18:28 #8
Цитата Сообщение от daslex Посмотреть сообщение
Вы пытаетесь переписать адрес x значением адреса y, а это физически невозможно.
штоа?
Цитата Сообщение от daslex Посмотреть сообщение
можно брать адрес, можно на него ссылаться, но нельзя его поменять.
где у ТС попытка изменить y?
0
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,677
04.02.2014, 18:51 #9

Не по теме:

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


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

Добавлено через 13 минут
x=y ==> Положить по адресу x "трамплин" к началу массива y,
x=&y ==> Попытка присвоить адрес в адрес (что физически не может быть сделано),
x=*(&y),x=&(*y) - без разницы как, ложим трамплин к адресу начала массива y
0
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
04.02.2014, 20:13 #10
y имеет тип int[5], который может быть неявно приведён к int*.
&y имеет тип int(*)[5], который в C может быть неявно приведён к int*, а в C++ - только явно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 20:13
Привет! Вот еще темы с ответами:

Почему обращение к недоступному адресу в памяти - C++
Почему при проверке кода(компиляции) выскакивает сообщение :&quot;Недостаточный размер массивов или обращение по недоступному адресу в памяти&quot; ?...

Почему в switch нельзя определять переменные? - C++
int main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; std::cout &lt;&lt; &quot;Введите число: &quot;; std::cin &gt;&gt; n; switch...

Почему нельзя подставлять переменные в выражения #if #else? - C++
Почему код работает, не должен же, потому что выражение стоящее после #if вычисляется на этапе компиляции, переменные подставлять нельзя?? ...

Почему два char нельзя сравнивать так ==? - C++
Почему два char нельзя сравнивать так ==?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.02.2014, 20:13
Ответ Создать тему
Опции темы

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