![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
halfnode |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.1.2011 Репутация: нет Всего: нет |
Всем привет!
Объясните пожалуйста, почему для получения адреса переменной такая запись:
А для получения адреса массива уже без амперсанда?
Почему? Это очень путает. Если сделать запись идентичной в случае с переменной:
То компилятор выдаст "нельзя использовать для инициализации сущности типа int"! Ну как так! Вы же меня только что учили, что амперсанд получает адрес!? Ужос. |
||||||
|
|||||||
ValeryLaptev |
|
|||
Препод Профиль Группа: Участник Сообщений: 41 Регистрация: 19.8.2010 Где: Астрахань Репутация: 1 Всего: 1 |
Когда - то давным - давно в С было правило: имя массива является КОНСТАНТОЙ-указателем.
Поэтому и операцию взятия адреса ставить не нужно: имя массива - это и так адрес. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
В языках С/С++ принято, что переменная массива может использоваться как неизменяемый указатель на первый элемент массива. Таким образом, когда ты берешь адрес от array, то получаешь в упрощенном случае указатель типа int * const* (т.е. указатель на указатель).
|
|||
|
||||
halfnode |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 18.1.2011 Репутация: нет Всего: нет |
Спасибо!
Но это полный аватар. ![]() |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 4 Всего: 49 |
Да нет, тут все вполне логично. Просто лучше помнить, что массивы в C (и его потомках) - не совсем массивы в смысле одной из классических структур данных. Скорее это "синтаксический сахар", позволяющий более простым на вид способом обращаться к различным местам участка памяти, выделенного для хранения однотипных данных. Если это держать в голове, то многие "странности", связанные с массивами в C, становятся понятными и очевидными. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |