Найти в Дзене

Инициализация массива в Си

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

Но вот в С/С++ это почему-то не так. В этих языках при создании переменной под неё просто выделяется свободная память. И если в этой памяти раньше что-то было, то это “что-то” будет и в новой переменной. То есть при создании переменной в С/С++ в ней может оказаться мусор. Поэтому в С/С++ крайне желательно все переменные инициализировать, то есть записывать в них какие-то значения при создании.

И если с обычными переменными это делается просто, например, так:

int i = 0;

то с инициализацией массивов справится не каждый новичок.

Первое, что приходит на ум - это перебрать элементы массива в цикле и записать в каждый какое-то значение. Например:

int M1[3];
for (int i = 0; i < 3; i++) M1[i] = 0;

Этот способ рабочий и вполне пригодный. Однако, если ваш массив содержит не сто тысяч элементов, то более наглядным будет инициализировать массив при объявлении, как это мы делали с переменной. Например:

int M2[3] = {5, 10, 15};

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

При таком объявлении можно не указывать размерность массива (она будет вычислена автоматически):

int M3[] = {10, 0, 12, 16};

Правда, в этом случае вам придётся соображать, сколько элементов содержит массив. Но в некоторых случаях можно вычислить длину массива, например, так:

int size = sizeof(M3) / sizeof(int);

Здесь мы размер массива делим на размер его элемента и таким образом получаем количество элементов. Однако это не самое лучшее решение.

Если вам надо инициализировать массив, в котором все его элементы будут иметь нулевое значение, то необязательно перечислять все элементы. Можно сделать так:

int M4[4] = {0};

Правда, с другими числами (не с нулями) это почему-то не работает.

Ну и в конце на картинке соберу кратко то, о чём было рассказано выше:

Кстати, если вы обратили внимание на имя исходного файла, то заметили, что этот код написан на чистом Си. Но и в С++ это тоже будет работать, конечно.

Однако есть одна особенность - изначально в С не было цикла for. Поэтому, если вы попытаетесь скомпилировать эту программу, например, в Dev-C++, то компилятор выдаст ошибку. Устранить эту неприятность можно, переведя компилятор в режим стандарта С99, который уже поддерживает циклы for.

Делается это через меню СЕРВИС - ПАРАМЕТРЫ КОМПИЛЯТОРА. Где надо добавить -std=c99 (см. рис. ниже):

-2

Если ваша программа на С++, а не на С, то ничего этого делать не обязательно, так как С++ с самого начала поддерживает циклы for.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.