Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Vegas_I
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
#1

Указатель на строковую константу. В чем отличие двух приведенных примеров - C++

27.01.2014, 14:40. Просмотров 1362. Ответов 28
Метки нет (Все метки)

char *x;
x = "Текст"; это указатель на строковую константу.

char x[]="Текст"; - строка(т.е. массив символов).


В чём отличие двух вышеописанных примеров? Ведь и там и там х -это указатель на начало массива. Почему в первом случае строка - это константа, а во втором нет?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2014, 14:40     Указатель на строковую константу. В чем отличие двух приведенных примеров
Посмотрите здесь:
Указатель на строковую константу C++
C++ Указатель на строковую константу
Преобразование в указатель на указатель на константу C++
ссылка на указатель на константу. Не могу врубиться C++
Константный указатель на константу меняет значение C++
C++ В чем отличие While от Do... While?
C++ cin.get в чем отличие ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
27.01.2014, 17:20     Указатель на строковую константу. В чем отличие двух приведенных примеров #16
Цитата Сообщение от aLarman Посмотреть сообщение
т.е в соседний процесс не попадет?
Под виндой точно нет. Если у кого есть ОС работающая не в защищённом режиме а в реальном, то возможно. Linux, вроде, тоже в защищённом работает.

Добавлено через 53 секунды
В DOS можно ОС убить, если неправильно обратиться по адресу.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,733
27.01.2014, 18:01     Указатель на строковую константу. В чем отличие двух приведенных примеров #17
Цитата Сообщение от aLarman Посмотреть сообщение
т.е в соседний процесс не попадет?
Цитата Сообщение от НеСказочник Посмотреть сообщение
Под виндой точно нет.
если пишешь приложения
а если дрова? т.е работаешь в режиме ядра
все что угодно вплоть до синего экрана

Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Не говорите глупости! Приложение из-за ошибок работы с указателями может попортить свою память и упасть,
Кузя платформы не ограничиваются только Виндой
НеСказочник
27.01.2014, 18:01
  #18

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
т.е работаешь в режиме ядра
все что угодно вплоть до синего экрана
Ага. Написать ОС камикадзе, которая спустя 30 дней убивает себя и комп, если не зарегаешься.

Vegas_I
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
27.01.2014, 18:05  [ТС]     Указатель на строковую константу. В чем отличие двух приведенных примеров #19
Цитата Сообщение от Убежденный Посмотреть сообщение
"Текст" в данном случае - это строковой литерал.
По стандарту языка C++, строковые литералы константны, а попытка их
изменения ведет к неопределенному поведению. Цитирую:

C++03, 2.13.4 String literals
Хорошо, а почему строковые литералы константны? Я всё понять не могу. Вот у нас есть строка "Текст", это массив символов. С чего бы ему быть строковым литералом?
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,733
27.01.2014, 18:08     Указатель на строковую константу. В чем отличие двух приведенных примеров #20
Цитата Сообщение от НеСказочник Посмотреть сообщение
Написать ОС камикадзе,
зря смеешся
что кривые дрова ни разу не попадались?
а там нет разделение на свой чужой
и отловить их гораздо труднее

Не по теме:

у меня был ТВ тюнер
прекрасно работал под 98, и под хрюнделем при одноядерной системе
а стоило подключить под гипертрейдинг и сразу же упало
косяки при работе с потоками



Добавлено через 2 минуты
Цитата Сообщение от Vegas_I Посмотреть сообщение
а почему строковые литералы константны?
по стандарту
Цитата Сообщение от Vegas_I Посмотреть сообщение
Вот у нас есть строка "Текст", это массив символов.
эта строка расположена в области глобальных и статических элементов
т.е память выделена на этапе компиляции и никто её тебе менять не даст
дизасемблируй пару листингов и увидишь сам
НеСказочник
27.01.2014, 18:10
  #21

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
зря смеешся
что кривые дрова ни разу не попадались?
а там нет разделение на свой чужой
и отловить их гораздо труднее
Это всё из-за того, что сейчас в Microsoft криворукие программисты сидят. В процах есть 4 кольца безопасности: одно для ядра, два для дров и одно для приложений. Так вот если бы они все 4 кольца по уму использовали, то половины синих экранов никогда бы не было. А у них, видете-ли, промышленное/быстрое программирование, заключающееся в постулате "Сделал как попало, главное работает."

Vegas_I
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
27.01.2014, 18:11  [ТС]     Указатель на строковую константу. В чем отличие двух приведенных примеров #22
Вот нашёл сообщение на форуме:
Изменить значение указателя

Вроде как объясняет мой вопрос..
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
28.01.2014, 08:39     Указатель на строковую константу. В чем отличие двух приведенных примеров #23

Не по теме:

Цитата Сообщение от НеСказочник Посмотреть сообщение
сейчас в Microsoft криворукие программисты...половины синих экранов никогда бы не было
Что-то я на XP уже плохо припоминаю синие экраны, а вот девяносто восьмую помню как каждую неделю руками надо было поднимать. Так что вы там про сейчас говорите?



Цитата Сообщение от Vegas_I Посмотреть сообщение
Вот нашёл сообщение на форуме
А сразу вам не захотелось почитать то, которое я написал?
1. Общие сведения

Ещё одна конструкция языков Си и Си++, которая часто приводит в затруднение начинающих - это строковой литерал. Начинающим, как правило, трудно понять, чем принципиально отличаются две следующие конструкции:

C
1
2
char str1[] = "abc";
char *str2 = "abc";
И так далее.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
28.01.2014, 11:17     Указатель на строковую константу. В чем отличие двух приведенных примеров #24
НеСказочник, считаешь себя умнее программистов майкрософт?
Croessmah
28.01.2014, 11:19
  #25

Не по теме:

Цитата Сообщение от НеСказочник Посмотреть сообщение
Это всё из-за того, что сейчас в Microsoft криворукие программисты сидят.
либо виндой пользуются криворукие пользователи. Винда у меня была приблизительно лет 10(с переустановками, конечно), ни одного синего экрана я за это время у себя не увидел.

Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.01.2014, 12:15     Указатель на строковую константу. В чем отличие двух приведенных примеров #26
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
char *x = "Текст";
равносилен
C++
1
char x[]="Текст";
Это не так. SatanaXIII уже приводил ссылку на блог, где это объясняется.

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
ни одного синего экрана я за это время у себя не увидел.
А у меня монитор отдавал розовым, поэтому тоже действительно синего экране не было
На восьмерке BSOD интересный, с грустным смайликом.

ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,733
28.01.2014, 12:31     Указатель на строковую константу. В чем отличие двух приведенных примеров #27
Цитата Сообщение от Tulosba Посмотреть сообщение
Это не так.
я это знаю
Цитата Сообщение от Tulosba Посмотреть сообщение
SatanaXIII уже приводил ссылку на блог,
я имел ввиду что в данном контексте,
что никакого выделения памяти в куче не будет
Цитата Сообщение от НеСказочник Посмотреть сообщение
хранятся там. эта память очень быстрая, но надо заранее знать сколько попросить, ибо расширять сегмент по ходу дела нельзя. А ещё есть так называемая куча , в которой можно по ходу дела забить столько места, сколько нужно. Но тогда тебе нужно хранить адрес начала той части кучи, в которой хранятся твои данные, например Код C++1
char *x = "Текст";. Все переменные в которых между типом и названием стоит завёздочка - хранят только адреса памти, а сами данные хранятся в куче.
вот на это я отвечал
хотя согласен получилось несколько коряво
или указатель на константу, или массив все таки разница есть
Croessmah
28.01.2014, 13:38
  #28

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
А у меня монитор отдавал розовым, поэтому тоже действительно синего экране не было
у меня фиолетовым отдавал, но метод сильного тыка кулаком в монитор устранял проблему на пару дней
Цитата Сообщение от Tulosba Посмотреть сообщение
На восьмерке BSOD интересный, с грустным смайликом.
скоро еще можно будет его погладить, чтобы успокоить расстроившуюся систему. Не просто так же они под сенсор заточили винду

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 16:31     Указатель на строковую константу. В чем отличие двух приведенных примеров
Еще ссылки по теме:
В чем отличие printf от cout? C++
В чем отличие decltype и auto C++
В чем отличие алгоритмов set_union и merge? C++
В чем отличие ссылочных переменных от указателей? C++
C++ C++, в чем отличие операций добавления в программе

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
28.01.2014, 16:31     Указатель на строковую константу. В чем отличие двух приведенных примеров #29
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
считаешь себя умнее программистов майкрософт?
Не в этом дело. Я раньше долго не понимал почему только два уровня безопасности (приложения и ядро), пока не узнал, что их на самом деле больше и обеспечиваются они ЦП, но используются нормально только два из них.
Yandex
Объявления
28.01.2014, 16:31     Указатель на строковую константу. В чем отличие двух приведенных примеров
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru