Инициализировать массив в C
В этой статье мы рассмотрим, как мы будем инициализировать массив в C.
Есть разные способы сделать это, поэтому мы перечислим их все один за другим. Давайте начнем!
Способ 1: инициализировать массив с помощью списка инициализаторов
Список инициализаторов инициализирует элементы массива в порядке списка.
Например, рассмотрим приведенный ниже фрагмент:
int arr[5] = {1, 2, 3, 4, 5};
Это инициализирует массив размером 5 с элементами {1, 2, 3, 4, 5} по порядку.
Это означает, что arr[0]=1
, arr[1]=2
и т. д.
Нам не нужно инициализировать все элементы от 0 до 4. Мы можем сделать это даже только с индексами от 0 до 2.
Также допустим следующий код:
int arr[5] = {1, 2, 3};
Но теперь arr[4]
и arr[5]
по-прежнему останутся мусорными значениями, так что нужно быть осторожным!
Если вы используете список инициализаторов со всеми элементами, вам не нужно указывать размер массива.
// Valid. Size of the array is taken as the number of elements
// in the initializer list (5)
int arr[] = {1, 2, 3, 4, 5};
// Also valid. But here, size of a is 3
int a[] = {1, 2, 3};
Если вы хотите инициализировать все элементы до 0, для этого есть ярлык (только для 0). Мы можем просто указать индекс как 0.
#include <stdio.h>
int main() {
// You must mention the size of the array, if you want more than one
// element initialized to 0
// Here, all 5 elements are set to 0!
int arr[5] = {0};
for (int i=0; i<5; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
Выход
0
0
0
0
0
Если вы используете многомерные массивы, вы все равно можете инициализировать их все в одном блоке, поскольку массивы хранятся построчно.
#include <stdio.h>
int main() {
int arr[3][3] = {1,2,3,4,5,6,7,8,9};
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
printf("%d\n", arr[i][j]);
return 0;
}
Выход
1
2
3
4
5
6
7
8
9
Аналогичный метод можно использовать и для других типов данных, таких как float
, char
, char*
и т. д.
#include <stdio.h>
int main() {
// Array of char* elements (C "strings")
char* arr[9] = { "Hello", [1 ... 7] = "JournalDev", "Hi" };
for (int i=0; i<9; i++)
printf("%s\n", arr[i]);
return 0;
}
Выход
Hello
JournalDev
JournalDev
JournalDev
JournalDev
JournalDev
JournalDev
JournalDev
Hi
Помните, что этот метод с [1 … 7]=\Journaldev может работать не со всеми компиляторами. Я работаю с GCC в Linux.
Способ 2: Инициализировать массив в C с помощью цикла for
Мы также можем использовать цикл for
для установки элементов массива.
#include <stdio.h>
int main() {
// Declare the array
int arr[5];
for (int i=0; i<5; i++)
arr[i] = i;
for (int i=0; i<5; i++)
printf("%d\n", arr[i]);
return 0;
}
Выход
0
1
2
3
4
Способ 3: использование назначенных инициализаторов (только для компилятора gcc)
Если вы используете gcc
в качестве компилятора C, вы можете использовать назначенные инициализаторы, чтобы установить для определенного диапазона массива одно и то же значение.
// Valid only for gcc based compilers
// Use a designated initializer on the range
int arr[9] = { [0 ... 8] = 10 };
Обратите внимание, что между числами есть пробел и есть три точки. В противном случае компилятор может подумать, что это десятичная точка, и выдать ошибку.
#include <stdio.h>
int main() {
int arr[9] = { [0 ... 8] = 10 };
for (int i=0; i<9; i++)
printf("%d\n", arr[i]);
return 0;
}
Вывод (только для gcc)
10
10
10
10
10
10
10
10
10
Мы также можем комбинировать это с нашими старыми элементами списка инициализаторов!
Например, я устанавливаю только индекс массива arr[0], arr[8]
равным 0, а остальные инициализируются значением 10!
#include <stdio.h>
int main() {
int arr[9] = { 0, [1 ... 7] = 10, 0 };
for (int i=0; i<9; i++)
printf("%d\n", arr[i]);
return 0;
}
Выход
0
10
10
10
10
10
10
10
0
Заключение
В этой статье мы узнали, как можно инициализировать массив C, используя различные методы.
Чтобы найти похожие статьи, просмотрите наш раздел учебных пособий по программированию на C!