在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”的方法可能不适用于所有的编译器。我在Linux上使用GCC。

方法2:使用for循环在C中初始化一个数组。

我们还可以使用 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

方法三: 使用指定初始化器(仅适用于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编程的教程部分!


bannerAds