Использование фигурных скобок (скобок) вокруг переменной C++

Я изучаю 2D-массивы в своем классе программирования. Мой учитель использовал что-то без объяснений, и мне было любопытно, почему мы это использовали. Поскольку это связано с символом, я не знаю, как его найти в Google или найти, поскольку эти символы используются в самом поиске. В любом случае код был таким:

int small[26]= {0}, large[26]={0}, i;

Зачем нужны фигурные скобки вокруг 0?

Программа, частью которой является этот код, исследует файл, ищет каждую букву алфавита и считает их по отдельности.


person Skathix    schedule 16.04.2014    source источник
comment
Вместо того, чтобы спрашивать, зачем нужны фигурные скобки, вы должны спросить, зачем нужны 0. Это не так. Здесь у вас есть инициализатор, и он использует указанные значения, если они есть, для инициализации соответствующих элементов массива и инициализирует остальную часть массива нулем (или значением по умолчанию типа).   -  person Cheers and hth. - Alf    schedule 17.04.2014
comment
Хорошо, тем не менее, какой цели они служат?   -  person Skathix    schedule 17.04.2014
comment
Это не 2D-массивы, а простые массивы в стиле C.   -  person blackbird    schedule 17.04.2014
comment
Также 0 является целочисленным литералом; не переменная.   -  person M.M    schedule 17.04.2014


Ответы (4)


Можно было бы написать еще проще

int small[26]= {}, large[26]={}, i;

Фигурные скобки означают список инициализаторов в данном случае массивов.

Предположим, например, что вы хотите определить массив с элементами 1, 2, 3, 4, 5.

Вы могли бы написать

int a[5];

a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;

Однако C++ позволяет назначать элементы массива, когда он определен. Эквивалентная запись будет выглядеть

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

Если инициализаторов меньше размера массива, то остальные элементы будут инициализированы нулями. Например

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

В этом случае a[0] будет равно tp 1 a[1] будет равно 2, а все остальные элементы будут равны 0.

Вы можете опустить размер массива. Например

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

В этом случае компилятор выделит столько элементов массива, сколько инициализаторов в списке инициализаторов.

Запись (допустима только в C++. В C не разрешена)

int a[5] = {};

эквивалентно

int a[5] = { 0 };

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

Таким же образом вы можете инициализировать и скалярные объекты. Например

интервал х = {10};

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

int x { 10 };

Вы также можете написать

int x {};

В этом случае x будет инициализирован 0.

person Vlad from Moscow    schedule 16.04.2014
comment
Когда я впервые увидел выражение типа int x { 10 }; в учебнике по C++, я был очень сбит с толку. C++, почему вы вообще это допускаете?! - person Alex Zinkevych; 07.02.2020

int Array[26]= {0};

Инициализирует все элементы в этом массиве равными 0.

Как BryanChen упоминает ниже:

Note: int Array[26]= {1}; will initialize first element to 1 and others to 0. 
person GriffinG    schedule 16.04.2014
comment
Примечание. int Array[26]= {1}; инициализирует первый элемент значением 1, а остальные — значением 0. - person Bryan Chen; 17.04.2014
comment
Как можно инициализировать все значения до 1? - person Skathix; 17.04.2014
comment
Либо int Array[26] = { 1,1,1,1,1 ...} с 26 единицами, либо создайте цикл, который подсчитывает точное число, которое вам нужно. - person GriffinG; 17.04.2014

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

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

person P.An    schedule 16.04.2014

Обратите внимание, что

int array [constant] = {};

По умолчанию инициализируются все значения. Инициализатор по умолчанию для int равен 0.

int small[26]= {0};

Устанавливает первое число равным 0, а по умолчанию инициализирует остальные.

В основном:

int array [constant] = {value initialize all indices listed here, 
                        the rest are default initialized};
person yizzlez    schedule 16.04.2014