Инициализировать массив в c в формате `int a[3]={0,};`

Я видел источник, где массив инициализируется в int arr[3] ={0,}; Что это значит? Обычно я использую этот формат int arr[3]={0}; могу ли я узнать, в чем разница?


person Bhavith C Acharya    schedule 20.07.2016    source источник


Ответы (1)


Вероятно, это дубликат, но я все равно попробую.

Между int arr[3] ={0,}; и int arr[3] ={0}; нет никакой разницы.

Ссылка: C11 6.7.9:

    initializer:
         assignment-expression
         { initializer-list }
         { initializer-list , }

Обе формы списков инициализаторов считаются инициализаторами. Многие предпочитают форму с запятой в конце, потому что она упрощает изменение порядка или добавление элементов в список во время обслуживания кода.

 int arr[3] ={0,}; 

объявляет массив из трех элементов и инициализирует первый элемент равным 0. При частичной инициализации остальная часть массива автоматически инициализируется нулями.

Ссылка С11 6.7.9:

Если в списке, заключенном в фигурные скобки, инициализаторов меньше, чем элементов или членов агрегата, или если в строковом литерале, используемом для инициализации массива известного размера, меньше символов, чем элементов в массиве, оставшаяся часть агрегата должна быть инициализированы неявно так же, как объекты со статической продолжительностью хранения.

person evaitl    schedule 20.07.2016
comment
Вопрос является полной копией инициализации массива C. Тем не менее, мне нравится ваш ответ больше, чем те, что приведены там. - person dxiv; 20.07.2016
comment
Дублирование, упомянутое в ответе SO 7043372, является вопросом C++, тогда как это для C. Предпочтительно, чтобы вопросы C дублировались на другие С вопросы. - person Jonathan Leffler; 20.07.2016