25 数组之数组的基本操作

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

数组之数组的定义

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

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

示例

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

1
int scores[3][4];

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

数组之数组的基本操作

1. 初始化

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

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

2. 访问元素

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

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

3. 遍历数组

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

1
2
3
4
5
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. 修改元素

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

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

5. 动态数组之数组

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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 语言中的数组操作!

25 数组之数组的基本操作

https://zglg.work/c-language-zero/25/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论