2016-07-20 3 views

ответ

5

Это, вероятно, dup, но я сделаю снимок в любом случае.

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

Ref: C11 6.7.9:

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

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

int arr[3] ={0,}; 

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

Реф. С11 6.7.9:

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

+2

Вопрос является полным дубликатом [Инициализация массива C] (http://stackoverflow.com/questions/16414622/array-initialization-c). Тем не менее, мне нравится ваш ответ лучше, чем те, которые там даны. – dxiv

+0

Дуп, упомянутый в ответе [SO 7043372] (http://stackoverflow.com/q/7043372), является вопросом C++, тогда как это для C. Предпочтительно, чтобы вопросы C дублировались на другие вопросы C. –