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

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

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

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

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

2

Решение

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

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. В последней записи первый элемент явно инициализируется нулем, а все остальные элементы также инициализируются нулем, потому что их инициализаторы в списке инициализаторов не были указаны.

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

int x = {10};

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

int x { 10 };

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

int x {};

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

3

Другие решения

int Array[26]= {0};

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

Как БрайанЧен упоминает ниже:

Note: int Array[26]= {1}; will initialize first element to 1 and others to 0.
2

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

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

1

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

int array [constant] = {};

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

int small[26]= {0};

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

В общем:

int array [constant] = {value initialize all indices listed here,
the rest are default initialized};
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector