Распределение памяти строки C неявное? - PullRequest
0 голосов
/ 04 апреля 2011

Возвращает sizeof(test) 24. Это массив из 3 char* указателей, каждый из которых по 8 байт на моем компьютере.Мой вопрос: правильно ли C выделяет место для символов?Я думаю, это так, потому что это работает, но я хочу убедиться, что я делаю это правильно.

char* test[] = {"QW", "BT", "GH"};
int size = sizeof(test) / sizeof(char*);

Ответы [ 4 ]

6 голосов
/ 04 апреля 2011

Да, это так. Хотя символы могут находиться в доступной только для чтения части памяти.

3 голосов
/ 04 апреля 2011

Да, компилятор выделит пространство (обычно в разделе статических данных только для чтения) для строковых литералов.

2 голосов
/ 04 апреля 2011

Да.Значение находится в памяти по адресу, указанному указателем * char, используемым в массиве.Так что да, он хранится в памяти.

0 голосов
/ 04 апреля 2011

Моя редакция 6.4.5 / 5 в Стандарт

... строковые литералы реализованы как массивы статическое хранилище длительность с типом 'char' ...

Итак, объекты выделяются как любая другая static переменная

static int arr[100] = {0};
if (strcmp(foo, "bar")) exit(0);
int *ptr = malloc(100 * sizeof *ptr);

Массив arr и строковый литерал "bar" размещаются одинаково; отличается от способа выделения ptr.

...