2016-08-29 2 views
0

Например,Что произойдет, если я попытаюсь определить указатель, который указывает на строковый литерал в C?

char * first = "Hello World!"; 

Мои вопросы,

  1. Является ли строка символов хранится в памяти? (Если я предполагаю, что указатель first это адрес щёток элемента строкового литерала «Hello World»)

  2. Если нет, то какое-то случайного значения указателя хранится в first?

+3

1. Да. 2. Moot, так как первый ответ «да». –

+0

Что значит «сохранение указателя»? –

+0

@RawN Я думаю, что слово «define» более подходит! – Jin

ответ

2

Да, строковые литералы хранятся в памяти. Стандарты C и C++ просто говорят, что строковые литералы имеют статическую продолжительность хранения, любая попытка их модификации дает неопределенное поведение, а несколько строковых литералов с одним и тем же содержимым могут или не иметь общего хранилища.

3

Да строка символов сохраняется в памяти, как правило, он хранится в разделе

1

.rodata Это зависит от вашей платформы, и это определяется реализацией. В общем случае он относится к только для чтения, если он доступен в вашей системе. Подробнее here.