Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатель, переменные и массивы. путаница. 
:(
    Опции темы
halfnode
Дата 1.2.2011, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.1.2011

Репутация: нет
Всего: нет



Всем привет!
Объясните пожалуйста, почему для получения адреса переменной такая запись:
Код

int k=0;
int* pk = &k;


А для получения адреса массива уже без амперсанда?
Код

int array[5]= {1,2,3,4,5};
int* pa = array;


Почему? Это очень путает. Если сделать запись идентичной в случае с переменной:
Код

int array[5]= {1,2,3,4,5};
int* pa = &array;

То компилятор выдаст "нельзя использовать для инициализации сущности типа int"!
Ну как так! Вы же меня только что учили, что амперсанд получает адрес!? Ужос.

PM MAIL   Вверх
ValeryLaptev
Дата 1.2.2011, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Препод



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 19.8.2010
Где: Астрахань

Репутация: 1
Всего: 1



Когда - то давным - давно в С было правило: имя массива является КОНСТАНТОЙ-указателем. 
Поэтому и операцию взятия адреса ставить не нужно: имя массива - это и так адрес. 
PM MAIL   Вверх
bsa
Дата 1.2.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



В языках С/С++ принято, что переменная массива может использоваться как неизменяемый указатель на первый элемент массива. Таким образом, когда ты берешь адрес от array, то получаешь в упрощенном случае указатель типа int * const* (т.е. указатель на указатель).
PM   Вверх
halfnode
Дата 1.2.2011, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 18.1.2011

Репутация: нет
Всего: нет



Спасибо!
Но это полный аватар. smile Просто придется запомнить.
PM MAIL   Вверх
Фантом
Дата 1.2.2011, 17:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Цитата(halfnode @  1.2.2011,  16:47 Найти цитируемый пост)
Просто придется запомнить. 

Да нет, тут все вполне логично. Просто лучше помнить, что массивы в C (и его потомках) - не совсем массивы в смысле одной из классических структур данных. Скорее это "синтаксический сахар", позволяющий более простым на вид способом обращаться к различным местам участка памяти, выделенного для хранения однотипных данных. Если это держать в голове, то многие "странности", связанные с массивами в C, становятся понятными и очевидными.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0827 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.