让我来详细讲解一下从头学习C语言之二维数组的完整攻略。
什么是二维数组?
在开始讲解二维数组之前,我们先来回顾一下什么是一维数组。一维数组是相同类型元素的集合,元素在内存中是连续分配的。类似于一排柜子,每个柜子可以存放一个元素。而二维数组,就是由一系列的一维数组组成的。我们可以将二维数组看作是一个由行和列组成的表格,其中每个元素都有一个对应的行和列。在内存中,二维数组的元素是按行排列的。类似于一个存放物品的仓库,每个仓位可以存放一个元素,而这些仓位按照“行”和“列”排列。
声明和初始化二维数组
C语言中,声明和初始化一个二维数组的方式如下:
data_type array_name[row_size][column_size];
其中,data_type
表示数组中元素的类型,array_name
表示数组的名字,row_size
是二维数组中行的数量,column_size
是二维数组中列的数量。
例如,声明一个3行4列的整型数组,可以写成:
int arr[3][4];
二维数组的初始化可以分为两种方式,静态初始化和动态初始化。静态初始化是指在定义数组时直接给出数组中的元素值。动态初始化是指在定义数组时不给出元素值,而是在程序运行时通过代码为数组元素赋值。
静态初始化
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
以上代码定义了一个3行4列的整型数组,并将其初始化为一个3行4列的矩阵,元素的值分别是1到12。
动态初始化
int arr[3][4];
for(int i = 0; i < 3; i++){
for(int j = 0; j < 4; j++){
arr[i][j] = i * 4 + j + 1;
}
}
以上代码定义了一个3行4列的整型数组,并通过循环为其赋值,元素的值分别是1到12。
二维数组的遍历
对于二维数组,我们通常需要使用嵌套循环来遍历它。其中外层循环控制行数,内层循环控制列数。
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
for(int i = 0; i < 3; i++){
for(int j = 0; j < 4; j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
以上代码遍历输出了一个3行4列的整型数组。
二维数组作为函数参数
在C语言中,将二维数组作为函数参数进行传递有两种方式:指向二维数组的指针和二维数组。使用指针作为函数参数更常见,因为指针允许数组大小动态改变。
指向二维数组的指针
void print_arr(int (*arr)[4], int row_size){
for(int i = 0; i < row_size; i++){
for(int j = 0; j < 4; j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main(){
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
print_arr(arr, 3);
return 0;
}
以上代码将一个二维数组作为函数参数进行传递,并打印出了数组的所有元素。
二维数组
void print_arr(int arr[][4], int row_size){
for(int i = 0; i < row_size; i++){
for(int j = 0; j < 4; j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main(){
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
print_arr(arr, 3);
return 0;
}
以上代码也将一个二维数组作为函数参数进行传递,并打印出了数组的所有元素。需要注意的是,在这种方式下只能省略第一维的大小,其他维度的大小不能省略。
示例说明
示例一
假设有一个5行6列的矩阵,其每个元素都是由用户输入得到的数值,现在我们需要对这个矩阵进行求和操作。
#include <stdio.h>
int main(){
int arr[5][6];
int sum = 0;
printf("请输入一个5行6列的矩阵:\n");
for(int i = 0; i < 5; i++){
for(int j = 0; j < 6; j++){
scanf("%d", &arr[i][j]);
}
}
for(int i = 0; i < 5; i++){
for(int j = 0; j < 6; j++){
sum += arr[i][j];
}
}
printf("矩阵元素的和为:%d\n", sum);
return 0;
}
以上代码通过两层嵌套的循环遍历每个元素并求和,最后输出结果。
示例二
假设有一个3行3列的矩阵,现在我们要将其中的每个元素都增加1。
#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++){
arr[i][j] += 1;
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
以上代码通过两层嵌套的循环遍历每个元素并增加1,最后输出结果。需要注意的是,由于本示例只是为了演示数组的修改操作,因此并没有使用用户输入来实现矩阵的初始化。在实际开发中,我们需要根据具体需求使用适当的方式为数组进行初始化。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从头学习C语言之二维数组 - Python技术站