198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
|
|
1 | |
Указатели и разыменование26.05.2013, 23:05. Показов 3401. Ответов 10
Метки нет (Все метки)
Я как то раньше не вдавался в эти подробности, разыменование или нет, просто ставил звездочку и все, и для меня было varOne и *varTwo по большому счету одно и тоже, только первое хранилось в памяти до конца роботы программы, а второе для него надо было в начале работы с этой "переменной" выделять область в динамической памяти, а потом, после использования этой "переменной" удалить из области динамической памяти, тем самым освободив память для каких-нибудь других ресурсов, но если разобрать, то это выглядит так:
если мы берем обыкновенную переменную, например varOne = 10 то она имеет свой адрес в ОП, например 00001 и по этому адресу располагается значение 10 Если: int *varTwo = new int(20); то мы грубо говоря имеем переменную varTwo которая имеет свой адрес в области ОП, например 00002, но по эту адресу хранится уже НЕ значение (например 20), а адрес на другую ячейку в ОП, например 00003 в которой уже хранится значение 20 если мы пишем cout << varTwo - то нам на экран выведет адрес на который ссылается данный указатель, т.е. 00003 если мы пишем cout << *varTwo - то нам выведет на экран значение, которое хранится по адресу 00003 т.е. 20 если мы пишем cout << &varTwo - то нам на экран адрес самого указателя, т.е. 00002 Все верно?
0
|
26.05.2013, 23:05 | |
Ответы с готовыми решениями:
10
Указатели и указатели на указатели, а также типы данных Разыменование Разыменование указателя Ссылка и Разыменование в с++ |
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
|
|
26.05.2013, 23:10 | 2 |
cout << varOne;
выведет значение (10). cout << &varOne выведет адрес (0001) cout << varTwo; выведет адрес (0002) cout << *varTwo выведет значение (20)
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
26.05.2013, 23:13 | 3 |
Конечно верно. Указатель это штука такая которой тяжело дать объяснение словами. В общем ты верно все разобрал.
0
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
|
26.05.2013, 23:13 | 4 |
0
|
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
|
|
26.05.2013, 23:17 [ТС] | 5 |
э.. давайте отложим, стеки, области динамической памяти и т.д. назовем все это одним словом - ОП, чем больше нагромождений, тем проще запутаться.
когда-нибудь и до этого дойдет дело Точно верно?, просто zss написал по другому, у него адреса поменялись местами, там где по моей логике varTwo - должно вывести 0003, то у него 0002
0
|
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
|
|
26.05.2013, 23:18 | 6 |
Вот как раз недавно задал подобный вопрос:
Адрес объекта, адрес указателя. Где что находится?
0
|
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
|
|
26.05.2013, 23:24 [ТС] | 8 |
черт..
Опять я ввел всех в заблуждение. Croessmah, спасибо. Если: int *varTwo = new int(20); то мы грубо говоря имеем переменную varTwo которая имеет свой адрес в области ОП, например 00002, но по эту адресу хранится уже НЕ значение (например 20), а адрес на другую ячейку в ОП, например 00003 в которой уже хранится значение 20 если мы пишем cout << varTwo - то нам на экран выведет адрес на который ссылается данный указатель, т.е. 00003 если мы пишем cout << *varTwo - то нам выведет на экран значение, которое хранится по адресу 00003 т.е. 20 если мы пишем cout << &varTwo - то нам на экран адрес самого указателя, т.е. 00002 Все верно?
0
|
Неэпический
|
|
26.05.2013, 23:27 | 9 |
Короче:
* - взять то что лежит по адресу & - взять адрес переменной то есть *varTwo - обратиться к значению, которое лежит по адресу, содержащемуся в указателе. &varTwo - взять адрес самого указателя varTwo varTwo - тут как и с обычной переменной - берем её значение(в данном случае адрес, на который "указывает" указатель)
1
|
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
|
|
26.05.2013, 23:42 [ТС] | 10 |
ну все как я и расписал, спасибо еще раз.
Добавлено через 11 минут Не по теме: Нет тяжелого для восприятия материала, есть плохие преподаватели (в том числе обучающие пособия), которые не могут должным образом донести этот материал :)
0
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
26.05.2013, 23:49 | 11 |
VLK, Ну яж говорил, что ты все правильно понял.
Добавлено через 3 минуты Ты просто через пол года скажешь, что правильно только врубился в указатели, ну у меня так было. Сразу с ними не разобрался, думал что разобрался, а оказалось не до конца.
0
|
26.05.2013, 23:49 | |
26.05.2013, 23:49 | |
Помогаю со студенческими работами здесь
11
Разыменование указателя this Разыменование итератора Разыменование указателя Разыменование указателя! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |