在C语言中声明数组的方式有多种,包括一维数组、二维数组和多维数组。 声明数组的基本语法是:数据类型 数组名[数组大小]。 其中,数据类型可以是C语言支持的任何数据类型,如int、float、char等。一维数组、二维数组、多维数组 这三种数组的声明方式是最常用的,特别是在需要存储和操作大量数据时。下面将详细介绍如何声明和使用这些数组类型。
一、一维数组
一维数组是最基本的数组形式,用于存储一组相同类型的数据。
1、声明和初始化
声明一维数组的基本形式是:
dataType arrayName[arraySize];
例如,要声明一个存储10个整数的一维数组,可以这样写:
int numbers[10];
数组的大小必须是一个常量表达式,可以是整数常量或#define定义的宏。
2、数组初始化
可以在声明数组时同时进行初始化:
int numbers[5] = {1, 2, 3, 4, 5};
如果提供的初始化列表比数组大小短,剩余的元素将被自动初始化为0:
int numbers[5] = {1, 2}; // 等价于 {1, 2, 0, 0, 0}
也可以不指定数组大小,由编译器根据初始化列表的大小自动推断:
int numbers[] = {1, 2, 3, 4, 5}; // 自动推断大小为5
3、访问数组元素
通过数组下标访问和修改数组元素,下标从0开始:
numbers[0] = 10;
printf("%d", numbers[0]); // 输出10
二、二维数组
二维数组用于存储矩阵或表格形式的数据。
1、声明和初始化
声明二维数组的基本形式是:
dataType arrayName[rows][columns];
例如,声明一个3行4列的二维数组:
int matrix[3][4];
2、数组初始化
可以在声明时进行初始化:
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
如果初始化列表比指定大小短,未提供初始值的元素将被初始化为0:
int matrix[3][4] = {
{1, 2},
{3, 4}
}; // 等价于 {{1, 2, 0, 0}, {3, 4, 0, 0}, {0, 0, 0, 0}}
3、访问数组元素
通过两个下标访问数组元素,第一个下标表示行,第二个下标表示列:
matrix[0][1] = 20;
printf("%d", matrix[0][1]); // 输出20
三、多维数组
多维数组是更高维度的数组,例如三维数组用于存储立体数据。
1、声明和初始化
声明多维数组的基本形式是:
dataType arrayName[size1][size2][size3];
例如,声明一个2x3x4的三维数组:
int tensor[2][3][4];
2、数组初始化
可以在声明时进行初始化:
int tensor[2][3][4] = {
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
},
{
{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}
}
};
3、访问数组元素
通过多个下标访问数组元素:
tensor[1][2][3] = 25;
printf("%d", tensor[1][2][3]); // 输出25
四、数组在函数中的使用
数组作为函数参数时,可以传递数组的指针。
1、传递一维数组
函数声明和定义时,参数可以是数组名或指针:
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
}
调用时传递数组名:
int numbers[] = {1, 2, 3, 4, 5};
printArray(numbers, 5);
2、传递二维数组
函数声明和定义时,需要指定列数:
void printMatrix(int matrix[][4], int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", matrix[i][j]);
}
printf("n");
}
}
调用时传递数组名:
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printMatrix(matrix, 3);
3、传递多维数组
类似于二维数组,但需要指定所有维度的大小(除了第一个维度):
void printTensor(int tensor[][3][4], int size1) {
for (int i = 0; i < size1; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 4; k++) {
printf("%d ", tensor[i][j][k]);
}
printf("n");
}
printf("n");
}
}
调用时传递数组名:
int tensor[2][3][4] = {
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
},
{
{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}
}
};
printTensor(tensor, 2);
五、动态数组
在C语言中,数组的大小通常在编译时确定,但可以使用动态内存分配来创建动态数组。
1、使用malloc函数
可以使用malloc函数从堆中分配内存:
int* dynamicArray = (int*)malloc(10 * sizeof(int));
if (dynamicArray == NULL) {
printf("Memory allocation failedn");
return;
}
for (int i = 0; i < 10; i++) {
dynamicArray[i] = i;
}
2、释放内存
使用free函数释放动态分配的内存:
free(dynamicArray);
3、动态二维数组
可以使用双重指针和循环来创建动态二维数组:
int dynamicMatrix = (int)malloc(3 * sizeof(int*));
for (int i = 0; i < 3; i++) {
dynamicMatrix[i] = (int*)malloc(4 * sizeof(int));
}
六、数组与字符串
在C语言中,字符数组用于表示字符串。字符串以空字符'