Адресация адреса строкового литерала в C

char **s = &"Is this valid?";

Разрешено ли получение адреса, по которому хранится адрес строкового литерала, в C? Я знаю, что строковый литерал хранится в сегменте данных.rodata. Однако получение адреса по этому адресу не имеет смысла.

Следует отметить, что gcc компилирует это и создает рабочий исполняемый файл.

2 ответа

Решение

Ваш пример недействителен:

char **s = &"Is this valid?";   // Not valid, wrong type

Это действительно:

char (*s)[15] = &"Is this valid?";  // OK

Тип "Is this valid?" является char[15], Тип указателя на массив 15 из char является char (*)[15], Так что тип &"Is this valid?" является char (*)[15],

Тип строкового литерала: char[N+1] где N длина строки

Тип &"Is this valid?" является char (*)[15] (т.е. указатель на массив длины 15 char).

Ваш код недействителен, так как GCC скажет вам, если вы компилируете с -Wall,

Другие вопросы по тегам