C语言数组初始化完全指南:方法、技巧与实例详解

这是文章《在C语言中初始化一个数组》的第1部分(共4部分)。

内容片段:在本文中,我们将探讨如何在C语言中初始化数组。

有多种不同的初始化方法,我们将逐一介绍这些方法。让我们开始吧!


方法1:使用初始化列表初始化数组

初始化列表会按照列表中的顺序依次初始化数组元素。

例如,请看以下代码片段:

int arr[5] = {1, 2, 3, 4, 5};

这段代码将初始化一个大小为5的数组,并按顺序包含元素{1, 2, 3, 4, 5}。

这意味着arr[0]的值为1,arr[1]的值为2,以此类推。

我们不必初始化所有元素,可以只初始化部分元素,例如只初始化索引0到2的元素。

以下代码也是有效的:

int arr[5] = {1, 2, 3};

注意:在这种情况下,arr[3]和arr[4]将保留未初始化的”垃圾值”,因此需要谨慎处理!

如果使用包含所有元素的初始化列表,则无需指定数组的大小。

// 有效。数组大小将根据初始化列表中的元素数量确定(此处为5)
int arr[] = {1, 2, 3, 4, 5};

// 同样有效。但这里数组a的大小为3
int a[] = {1, 2, 3};

如果要将所有元素初始化为0,有一个快捷方法(仅适用于0)。我们只需将第一个元素指定为0即可。

#include <stdio.h>

int main() {
    // 如果想将多个元素初始化为0,必须指定数组大小
    // 这里,所有5个元素都被设置为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() {
    // char*元素数组(C语言"字符串")
    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循环初始化数组

我们还可以使用for循环来设置数组的元素。

#include <stdio.h>

int main() {
    // 声明数组
    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编译器,你可以使用指定的初始化器,将数组的特定范围设置为相同的值。

// 仅适用于基于gcc的编译器
// 在范围上使用指定初始化器
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