C语言为二维数组分配连续内存可以使用动态内存分配的方式来实现。动态内存分配函数malloc()
可以把一段连续的内存块分配给程序,而指针可以跨越这段内存块进行访问和操作,因此我们可以使用malloc()
函数为二维数组分配连续的内存。
下面是为一个m * n
的二维数组分配内存的代码:
int **array; // 定义二维数组指针
array = (int **)malloc(m * sizeof(int *)); // 分配行指针
for(int i=0; i<m; i++){
array[i] = (int *)malloc(n * sizeof(int)); // 分配列数组
}
上述代码首先分配了一段大小为m * sizeof(int *)
的内存作为array
数组的行指针,然后在循环中分别分配了n * sizeof(int)
大小的内存作为每一行的列数组。注意,每一行的列数组大小必须相同。
分配完成后,我们就可以通过二重循环来访问和修改数组元素:
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
array[i][j] = i + j;
printf("%d ", array[i][j]);
}
printf("\n");
}
下面是一个完整的示例代码,演示了如何为二维数组分配连续内存:
#include <stdio.h>
#include <stdlib.h>
int main(){
int m = 3, n = 4;
int **array;
// 分配内存
array = (int **)malloc(m * sizeof(int *));
for(int i=0; i<m; i++){
array[i] = (int *)malloc(n * sizeof(int));
}
// 赋值和输出
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
array[i][j] = i + j;
printf("%d ", array[i][j]);
}
printf("\n");
}
// 释放内存
for(int i=0; i<m; i++){
free(array[i]);
}
free(array);
return 0;
}
该示例代码中,我们首先定义了一个m * n
的二维数组指针array
,然后使用malloc()
函数为其分配了相应的内存。接下来我们通过双重循环,对二维数组进行了赋值并输出了其元素。最后,我们使用free()
函数释放了分配的内存。
除了上述示例代码中的方法,还有其它一些实现方法,如将二维数组转为一维数组,分配一段连续的内存,再通过指针操作来访问和修改元素。不过这种方法不够直观,不便于理解和维护,在这里就不再赘述。