![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Чем отличаются указатели p1 и p2? |
|||
|
||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Тем, что p1 - это не указатель, а массив определенного размера. Просто он, как и любой массив в C++ может быть неявно преобразован в указатель. И убедиться в этом очень просто:
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
В том что char *p2 является константой,а p1 просто массив символов
Это сообщение отредактировал(а) nikitao - 13.1.2006, 18:00 -------------------- Жизнь - печальная штука. |
|||
|
||||
| blackofe |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
не понял. с какой радости p2 является константой? вот такой код компилер откомпилит, а программа выполнится и не поперхнется:
а если ты имеешь в виду, что нельзя писать вот так
то это не называется константой. и компилятор это опять же проглотит спокойно. другое дело, что в процессе выполнения ты получишь "access violation", но это уже другая история. |
||||||
|
|||||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Массив - константный указатель
|
|||
|
||||
| blackofe |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
что-то я логики не нахожу. думаю, что это просто была описка. |
||||||||
|
|||||||||
| Helicopterr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
Нет не описка. Массив - это указатель - константа на адрес первого элемента. Оператор [] может и не использоваться. Например
Надеюсь теперь разница понятна. -------------------- people can fly |
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
blackofe
Константа - это то, что не меняется в процессе работы программы. Константный указатель - это константа, содержащая адрес. Этот адрес не может меняться. Указатель на строку - это указатель на КОНСТАНТУ. Сам указатель может меняться, а вот строка - нет. Да пример-то попробуй! |
|||
|
||||
| blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
все верно. пардон. заблудился в терминах |
|||
|
||||
| LuckLess |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 15.9.2004 Репутация: 1 Всего: 1 |
Не совсем так. Массив - непрерывная область памяти содержащая элементы типа T , следующие друг за другом. Имя массива - константный указатель на первый элемент массива. Это с чегойто вдруг..? Смотря что щитать строкой. Если строкой щитать массив символов оканчивающихся '\0' то твое утверждение неверно.. попробуй.
Это сообщение отредактировал(а) LuckLess - 18.1.2006, 16:09 |
||||
|
|||||
| blackofe |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
LuckLess, имеется в виду конкретный пример:
здесь "Hello, world!" - строковая константа, а p2 - указывает на нее. и
вызовет ошибку выполнения 'access violation', поскольку будет выполнена попытка записи в константную строку. более того, вот такой код
вызовет такую же ошибку. |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |