Поиск по сайту:

Инициализировать массив в 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!