Адресация адреса строкового литерала в C - PullRequest
5 голосов
/ 31 марта 2012
char **s = &"Is this valid?";

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

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

Ответы [ 2 ]

7 голосов
/ 31 марта 2012

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

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 - длина строки.

2 голосов
/ 31 марта 2012

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

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

...