1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
|
|
1 | |
Указатель на строковую константу. В чем отличие двух приведенных примеров27.01.2014, 14:40. Показов 3005. Ответов 28
Метки нет (Все метки)
char *x;
x = "Текст"; это указатель на строковую константу. char x[]="Текст"; - строка(т.е. массив символов). В чём отличие двух вышеописанных примеров? Ведь и там и там х -это указатель на начало массива. Почему в первом случае строка - это константа, а во втором нет?
0
|
27.01.2014, 14:40 | |
Ответы с готовыми решениями:
28
Указатель на строковую константу Указатель на строковую константу В чём отличие константного указателя и указателя на константу? Инициализация полей - в чем разница двух приведенных реализаций |
27.01.2014, 14:53 | 2 | |||||||||||||||
При запуске приложения ему выделяется его личный сегмент памяти и все переменные, вроде
Очень важно помнить, что после использования кучи в ней надо прибраться при помощи конструкций вида
0
|
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
|
||||||
27.01.2014, 14:58 [ТС] | 3 | |||||
Тогда получается, что
0
|
27.01.2014, 15:04 | 4 | ||||||||||||||||||||
Не путай динамический массив с массивом в динамической памяти.
Добавлено через 41 секунду И это не константа, так как нигде нет
Ты ведь не можешь написать
Можно только переопределить массив с новым размером, но тогда все данные в старом потеряются. Добавлено через 1 минуту Так и со строками.
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
27.01.2014, 15:07 | 5 |
Сообщение было отмечено Vegas_I как решение
Решение
Vegas_I, вот здесь можете популярно почитать: Строковые литералы в Си/Си++ .
1
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
27.01.2014, 16:12 | 6 |
Добавлено через 1 минуту молодой человек, а кто сказал что так нельзя ?)
0
|
27.01.2014, 16:14 | 7 |
Написать-то всё можно, только вот результат будет непредсказуемый. VS, к примеру, может вылететь с криками о повреждении кучи или даже найти где-то точку останова, которой ни кто не ставил.
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
27.01.2014, 16:17 | 8 |
а если собрать в релизе а не в дебаге ?) может ничего и не произойти, а потом у вас почему то упадет Word
Добавлено через 1 минуту такое обращение undefined behavior и к чему он приведет....известно только великому китайскому рандому
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
27.01.2014, 16:22 | 10 |
ты серьезно считаешь что память выделится в куче?
и обязательно нужен ну ежли желаешь краха программы то да память в куче выделяется new и только для него удаление delete или malloc удаление у него free а равносилен
0
|
aLarman
|
27.01.2014, 16:30
#11
|
0
|
Ушел с форума
|
|
27.01.2014, 16:32 | 12 |
"Текст" в данном случае - это строковой литерал.
По стандарту языка C++, строковые литералы константны, а попытка их изменения ведет к неопределенному поведению. Цитирую: C++03, 2.13.4 String literals
0
|
27.01.2014, 17:00 | 14 |
Тут кто-то упомянул что из-за UB может "word упадёт". Не говорите глупости! Приложение из-за ошибок работы с указателями может попортить свою память и упасть, но уж соседний "word" никак не "упадёт"!
0
|
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|
27.01.2014, 17:18 | 15 |
0
|
27.01.2014, 17:20 | 16 |
Под виндой точно нет. Если у кого есть ОС работающая не в защищённом режиме а в реальном, то возможно. Linux, вроде, тоже в защищённом работает.
Добавлено через 53 секунды В DOS можно ОС убить, если неправильно обратиться по адресу.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
27.01.2014, 18:01 | 17 |
если пишешь приложения
а если дрова? т.е работаешь в режиме ядра все что угодно вплоть до синего экрана Добавлено через 1 минуту Кузя платформы не ограничиваются только Виндой
1
|
НеСказочник
|
27.01.2014, 18:01
#18
|
0
|
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
|
|
27.01.2014, 18:05 [ТС] | 19 |
Хорошо, а почему строковые литералы константны? Я всё понять не могу. Вот у нас есть строка "Текст", это массив символов. С чего бы ему быть строковым литералом?
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
27.01.2014, 18:08 | 20 |
зря смеешся
что кривые дрова ни разу не попадались? а там нет разделение на свой чужой и отловить их гораздо труднее Не по теме: у меня был ТВ тюнер Добавлено через 2 минуты по стандарту эта строка расположена в области глобальных и статических элементов т.е память выделена на этапе компиляции и никто её тебе менять не даст дизасемблируй пару листингов и увидишь сам
0
|
27.01.2014, 18:08 | |
27.01.2014, 18:08 | |
Помогаю со студенческими работами здесь
20
В чем разница двух примеров кода Как в классе создать строковую константу? Как правильно сравнить строку и строковую константу? Напечатать все слова последовательности, содержащие строковую константу. Как получить имя переменной, или преобразовать ее в строковую константу? В чем отличие двух файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |