C语言二维数组不定长度
时间: 2024-10-30 22:05:58 浏览: 35
在C语言中,传统的二维数组通常需要指定每个维度的大小。例如,`int arr[3][4]`是一个3行4列的固定大小二维数组。然而,如果你想要创建一个动态分配内存、可以添加或删除行数和列数的二维数组,你可以使用结构数组或者指针相结合的方式。
一种方法是通过一维数组来间接表示二维数组,例如:
```c
typedef struct {
int* row;
int row_size; // 行的数量
} DynamicArray;
// 动态分配二维数组
DynamicArray* createDynamicArray(int rows, int cols) {
DynamicArray* arr = (DynamicArray*)malloc(sizeof(DynamicArray));
arr->row = malloc(rows * sizeof(int*)); // 存储每行的指针
for (int i = 0; i < rows; i++) {
arr->row[i] = malloc(cols * sizeof(int)); // 分配每行所需的内存
}
arr->row_size = rows;
return arr;
}
// 使用时
void setElement(DynamicArray* arr, int row, int col, int value) {
if (row >= arr->row_size || col >= arr[arr->row_size - 1]) {
printf("索引越界\n");
return;
}
arr->row[row][col] = value;
}
// 释放内存
void destroyDynamicArray(DynamicArray* arr) {
for (int i = 0; i < arr->row_size; i++) {
free(arr->row[i]);
}
free(arr->row);
free(arr);
}
```
这种方法允许你在运行时改变数组的大小,但访问元素时需要额外的步骤(如检查索引是否有效)。
阅读全文