![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
shedon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1209 Регистрация: 17.1.2003 Где: Нижнiй Новгородъ Репутация: 4 Всего: 11 |
это неправильно, над так: char mystr1[]="abcde"; Просто попробуйте соед. код:
-------------------- Programming is like sex: One mistake and you have to support it your lifetime |
||||
|
|||||
!Жека! |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 26.11.2004 Репутация: нет Всего: нет |
Все очень просто. Ты объявляеш указатель:
При этом компилятор не выделяет ни какой памяти, он просто запоминает имя и тип переменной. Этот указатель не начто не указывает - так. Далее ты пишеш:
Здесь компилятор делает небольшую хитрость он выделяет память и иницилизирует ее строкой "asdfghjkl". Т.е. он выполняет все так как если бы ты написал:
Понял ![]() |
||||||||
|
|||||||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
!Жека!
![]() Какой же это константный указатель, коли там const нет? |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Условно - константный.
Или константный для дибагера ![]() Подойдёт? ![]() |
|||
|
||||
!Жека! |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 26.11.2004 Репутация: нет Всего: нет |
Путь ты и
Хотя все это зависит от среды программирования и настроек. Вот уменя такой фокус не прошел с выделением и памяти. пришлось писать так:
При этом если ты напишеш так:
то тоже получиш ошибку, а почему - догадайся. А вообще выкинь тот учебник в котором ты взял такой пример. Это плохой пример или перечитай заново эту статью может что и упустил.[s] |
||||||||
|
|||||||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
А ты в релиз скомпиль, ошибка пропадёт ![]() Это вечный спор и мы его с Никитой уже долго вели ![]() При этом каждый при своём остаётся ![]() ПС: !Жека!, тоже CTRL+S 'ом пытаешься мессагу отправить? ![]() |
|||
|
||||
!Жека! |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 26.11.2004 Репутация: нет Всего: нет |
Да!!! ![]() Ну и на этом закончим!!! |
|||
|
||||
Волод |
|
|||
Unregistered |
Прошу прощения, что вмешиваюсь, но меня заинтересовало начало кода с выделением памяти под указатель *mystr2. Как я понял, мы "разносим" указатели в пространстве, выделяя под каждый из них свой блок памяти. А как сделать так, чтобы оба указателя ссылались на один блок? Если это нельзя сделать через *mystr2 = *mystr1; - тогда как?
И второй вопрос по циклу:
ЧТо здесь является признаком окончания цикла? Если это выражение при очередном присвоении возвращает ложь, то как и почему? - как здесь происходит контроль выхода за пределы массива? |
|||
|
||||
bel_nikita |
|
||||||||||||||||||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
shedon
Пробывал, в релиз MSVC6 ![]() ![]() !Жека!
![]()
![]()
![]() Вот, константный указатель:
так, что char* p = "dfjd"; - никакой не константный указатель. Волод
По другому это выглядит так:
Вернемся к нашей проблеме. sergej.z
![]() А проблема, то что в дебаг не работает, а в релиз работает - это все в распеределении памяти ![]() Вот, простенький примерчик:
Запустите его в дебаг, потом в релиз. И внимательно посмотрите на то, что выпишет printf. Запишите адреса на бумажку. Потом для укрепления теории ![]()
Я так понимаю, делается это дебагером специально, чтобы в релиз при оптимизации не возникали проблемы. Кстати, в MSVC 7.1 выдает экзепшен как в дебаг, так и в релиз. Там, немного по другому память выделяется З.Ы.: кому интересно отличие char*p от char p[] читаем здесь . Потом запускам дебаг режим и смотрим, что компилятор генерит в этих случаях. |
||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Я всё же попытаюсь коротко ответить на сам вопрос Волод 'а
![]()
оператор * - содержимое указателя. В этом случае то же, что и [0]. То есть *mystr2 == mystr2[0] Чтобы указатель показывал на другой участок памяти делаем просто: mystr2 = mystr1 ------------------
вот когда содержимое указателя mystr1 станет 0. цикл и остановится ![]() |
||||
|
|||||
Guest |
|
|||
Unregistered |
sergej.z, спасибо. Ведь знал, что после обьявления указателя обращение к нему идет без оператора*- и вот надо же, стал читать чужой листинг и запарил.
|
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Не проблема
![]() ![]() ПС: Добро пожаловать к нам на форум! ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |