![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
прокатывает по тому что твоя строка это масив символов, имя масива это всегда указатель и по этому оно прокатывает, а вот имя масива и число в квадратных скобках это уже значение, а не указатель -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
Step |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
ты конечно прав, но только в том случае если pyfxtybt *v на месте ..... не использовалось
ну а при переадресации желательно конечно сделать делет -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
||||||
|
|||||||
Fantasist |
|
||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Если было бы так, я бы не смог присвоить его значение не константному указателю. То есть такое не компилировалось бы:
Скорее этот тип char const* Но на самом деле, он имеет тип char[] ![]() P.S. Для интересующихся: в VC++ посмотрите на сообщение компилятора, на такое выражение: ("dfdfsd")=(char*)(0x1); Это сообщение отредактировал(а) Fantasist - 28.2.2003, 01:44 -------------------- Волны гасят ветер... |
||||
|
|||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Мало того. Если написать что-то вроде такого char* var1 = "12345"; char* var2 = "12345"; то оптимизатор скорее всего оставит всего одну строку в сегменте данных, а обоим указателям присвоит один и тот же адрес. Для меня обычным стало правило, что такого рода указатели объявлять как константы и использовать именно в таком ракурсе. В этом случае никаких проблем не возникает. Хотя хорошо, что такой вопрос возник - значит думаем, смотрим, замечаем. Хорошая смена нам, старикам, растет ![]() |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Вряд ли. Это очень опасное предположение - нет никакой гарантии, что я не хочу изменить первую строку не изменяя второй. -------------------- Волны гасят ветер... |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
ну, это смотря на кокую глубину оптимизатор смотреть будет -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Разве что в простешем случае. Я могу сохранить этот адрес в переменной, и изменить в другом юните компиляции - оптимизатор туда заглянуть не может. -------------------- Волны гасят ветер... |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
Fantasist а ты выставь максимальный уровень проверки, и посмотри предупреждения при компиляции
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
BlowFish |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 29.3.2002 Где: Санкт-Петербург Репутация: нет Всего: нет |
Смотрю СтраусТрупа
![]() В "С" строковый литерал имел тип char*, а в С++ - const char[]. Для совместимости кода С и С++ разрешается присваивание char* p = "abc"; Но вот изменение, например: p[0] = 'A' приведет к ошибке. На счет "оптимизатора"... В VC++6 результатом такого кода:
Что и требовалось доказать |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
*(p+1)='d' - прокатит -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
dim |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 24.12.2002 Репутация: нет Всего: нет |
В VisualC компилятор будет делать это только если включена опция /Gf или /GF, не знаю как Builder. --------------------
that's all |
||||
|
|||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Значит VC расходиться здесь со стандартом. Если считать, что он должен быть const char[], то тогда можно и оптимизацию вышеописанную проводить. -------------------- Волны гасят ветер... |
|||
|
||||
BlowFish |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 29.3.2002 Где: Санкт-Петербург Репутация: нет Всего: нет |
не прокатит (специально попробывал запустить прогу) |
||||
|
|||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
Molnienosetz |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 6.3.2003 Где: Россия, Королёв, комитетский лес Репутация: нет Всего: нет |
Хочу сделать замечание. Если необходимо удалить кусок памяти, выделенный так:
char *ptch = new char [1024]; , то вроде как надо писать delete [] ptch; Это обязательно? Причём насколько я знаю, в книжках (я прочитал с полтора десятка) ничего на эту тему нет, этот вопрос подробно освещён только в одной - как-то там про VC++. Там ещё пишут, что если квадратные скобки опустить, то высвободится память только из под первого объекта. Вопрос не по теме: я воще новичок, ничо, что я везде суюсь? --------------------
"Вы только появились на форуме, но уже стали весьма популярны. Правда не как профессионал, а большой зазнайка."Это про меня! :) (В том смысле, что писалось не про меня.) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |