Jupyter AI

25 数组之数组的基本操作

📅 发表日期: 2024年8月10日

分类: 💻C 语言入门

👁️阅读: --

在上篇内容中,我们探讨了二维数组的基本概念和操作。此篇将继续讨论数组的延伸——数组之数组,即数组中的数组。这在C语言中通常是用来处理更复杂的数据结构,比如二维数组三维数组等。接下来,我们将详细了解如何进行基本操作。

数组之数组的定义

数组之数组可以看作是一个数组,数组的每个元素又是一个数组。在 C 语言中,数组之数组的声明方式如下:

数据类型 数组名[外层大小][内层大小];

示例

假设我们要创建一个存储 3 个学生的 4 门课成绩的数组:

int scores[3][4];

这里,scores 是一个 3 × 4 的数组,其中 scores[i][j] 表示第 i + 1 个学生在第 j + 1 门课的成绩。

数组之数组的基本操作

1. 初始化

数组之数组的初始化可以在声明时进行,也可以在后续单独进行:

int scores[3][4] = {
    {85, 90, 78, 92},  // 第1个学生的成绩
    {88, 76, 95, 89},  // 第2个学生的成绩
    {90, 89, 94, 91}   // 第3个学生的成绩
};

2. 访问元素

访问 数组之数组 的元素通过两个下标进行,在C语言中,这样访问:

int student1_grade1 = scores[0][0]; // 第一个学生的第一门课成绩

3. 遍历数组

可以使用嵌套的 for 循环来遍历 数组之数组 的所有元素:

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        printf("学生 %d 的 第 %d 门课成绩: %d\n", i + 1, j + 1, scores[i][j]);
    }
}

4. 修改元素

修改 数组之数组 的元素和访问是类似的,你只需要指定正确的索引:

scores[1][2] = 90; // 将第二个学生的第三门课成绩改为90

5. 动态数组之数组

在某些情况下,你可能需要动态创建 数组之数组,这时可以使用指针和动态内存分配:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int **scores;
    int outer_size = 3; // 学生数量
    int inner_size = 4; // 每个学生的课程数量

    // 动态分配内存
    scores = (int**)malloc(outer_size * sizeof(int*));
    for (int i = 0; i < outer_size; i++) {
        scores[i] = (int*)malloc(inner_size * sizeof(int));
    }

    // 初始化成绩
    scores[0][0] = 85; scores[0][1] = 90; scores[0][2] = 78; scores[0][3] = 92;
    scores[1][0] = 88; scores[1][1] = 76; scores[1][2] = 95; scores[1][3] = 89;
    scores[2][0] = 90; scores[2][1] = 89; scores[2][2] = 94; scores[2][3] = 91;

    // 输出成绩
    for (int i = 0; i < outer_size; i++) {
        for (int j = 0; j < inner_size; j++) {
            printf("学生 %d 的 第 %d 门课成绩: %d\n", i + 1, j + 1, scores[i][j]);
        }
    }

    // 释放内存
    for (int i = 0; i < outer_size; i++) {
        free(scores[i]);
    }
    free(scores);

    return 0;
}

总结

在本篇中,我们介绍了数组之数组的基本概念和操作,包括定义、初始化、访问、修改和遍历等内容。使用 数组之数组 可以有效地处理动态且复杂的数据结构。在下一篇中,我们将转向另一个重要话题——字符串之字符串的定义,深入理解字符串在 C 语言中的应用。希望这篇内容能帮助你更好地掌握 C 语言中的数组操作!