C语言为二维数组分配连续内存

  • Post category:C

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()函数释放了分配的内存。

除了上述示例代码中的方法,还有其它一些实现方法,如将二维数组转为一维数组,分配一段连续的内存,再通过指针操作来访问和修改元素。不过这种方法不够直观,不便于理解和维护,在这里就不再赘述。