неопределенное измерение инициализации массива с помощью {} - PullRequest
3 голосов
/ 07 января 2012

Мне интересно, если:

int a[] = {1, 2};

выделяет sizeof (int) * количество констант в скобках

int a[5] = {1, 2};

присваивает константы полям массива от 0 до 1, а затем заполняет 0

int a[5] = {};

заполняется 0

Что происходит, когда я делаю:

int a[] = {};

Спасибо.

1 Ответ

6 голосов
/ 07 января 2012
int a[5] = {};

и

 int a[] = {};

не являются допустимыми определениями C.

В GNU C (C с расширениями gcc) вы можете использовать пустой {}, и он считается таким же, как {0}.

Обратите внимание, что int [] является неполным типом. При инициализации массива неполного типа с явными инициализаторами тип завершается, и тогда количество элементов массива равно количеству элементов в заключенном в скобки списке инициализаторов.

Итак, int a[] = {0}; определяет массив из 1 элемента в C, а в GNU C int a[] = {}; делает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...