什么是数组
在C语言中,数组是一种数据结构,它可以容纳一组相同类型的数据。数组中的每个元素都有一个唯一的下标,它表示数组中元素的位置。数组可以用来存储字符串、数字和其他数据类型。定义数组时,必须指定数组的大小。
数组的定义方法
定义数组的语法如下:
type name[size];
其中,type 表示数组中存储的数据类型,name 是数组的名字,size 表示数组的大小,即数组可以容纳多少个元素。例如,下面的代码定义了一个整数数组,它可以容纳 10 个整数:
int num_arr[10];
数组的元素可以通过下标来访问。数组下标从 0 开始,因此 num_arr[0] 表示数组中的第一个元素,num_arr[1] 表示第二个元素,以此类推。例如,下面的代码向 num_arr 数组的第一个元素赋值为 10:
num_arr[0] = 10;
初始化数组
定义数组时,可以通过初始化为它的元素赋初值。有以下两种方法可以进行初始化:
方法一
直接在定义数组时为它的元素赋初值。例如:
int num_arr[3] = {1, 2, 3};
上述代码定义了一个大小为 3 的整数数组 num_arr,并将其元素分别赋值为 1、2、3。
方法二
初始化数组时,还可以只给出部分元素的初始值。例如:
int num_arr[5] = {1, 2, 3};
上述代码定义一个大小为 5 的整数数组 num_arr,并将其前三个元素分别赋值为 1、2、3,其余两个元素赋值为 0。
多维数组
除了一维数组,C语言还支持多维数组。多维数组可以被看作是一个表格,其中每个元素都有唯一的行列坐标。定义一个二维数组可以使用下面的语法:
type name[rows][cols];
其中,type 表示数组中存储的数据类型,name 是数组的名字,rows 表示数组中有多少个行,cols 表示数组中有多少个列。例如:
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
上述代码定义了一个 2 行 3 列的二维数组 matrix,可以表示一个 2×3 的矩阵。我们可以使用下标来访问数组中的元素。例如,matrix[0][0] 表示数组中第 0 行第 0 列的元素,值为 1;matrix[1][2] 表示数组中第 1 行第 2 列的元素,值为 6。
数组与指针
数组名就是数组第一个元素的地址,因此数组名也可以被认为是一个指针。例如:
int num_arr[3] = {1, 2, 3};
printf("%d\n", num_arr[0]); // 输出 1
printf("%d\n", *num_arr); // 输出 1
printf("%p\n", num_arr); // 输出数组的起始地址
上述代码中,指针变量 num_arr 和 num_arr[0] 都指向数组中的第一项。因此,*num_arr 和 num_arr[0] 都可以用来访问 num_arr 数组中的第一个元素。
当一个数组作为参数传递给函数时,它会自动转换为指向数组第一个元素的指针。例如:
void print_arr(int arr[], int n)
{
int i;
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
}
int main()
{
int num_arr[3] = {1, 2, 3};
print_arr(num_arr, 3);
return 0;
}
上述代码中,在 print_arr 函数中,数组 arr 是以指针的形式传递给函数的,但在函数体内部,我们还是可以使用下标来访问数组中的元素。
结语
数组是C语言中非常重要的一种数据结构,它可以用来存储数字、字符串和其他数据类型。定义数组时,必须指定数组大小,数组可以是一维的,也可以是多维的。数组名可以被认为是指向数组第一个元素的指针。