当先锋百科网

首页 1 2 3 4 5 6 7

分析两种动态分配二位数组的方法,其原理一致。

0. 动态分配一维数组int a[rows]

#include <stdlib.h>

int main{void}
{
    ...

    int *a = (int *)malloc(rows * sizeof(int));//分配一段内存,存放rows个int型的数据
    
    ...
}

1. 动态分配内容不一定连续的二维数组a[rows][columns]

#include <stdlib.h>

int main{void}
{
    ...

    int **a = (int **)malloc(rows * sizeof(int *));//分配一个指针数组有rows个元素,数组的每一个元素是一个数组指针
    
    for(i = 0;i < rows; i++)
    {
      a[i] = (int *)malloc(columns * sizeof(int));//为每数组指针分配columns个存放int型数据的内存
    }

    ...
}

2. 分配连续的二维数组a[rows][columns]

#include <stdlib.h>

int main{void}
{
    ...

    int **a = (int **)malloc(rows * sizeof(int *));//分配一个指针数组有rows个元素,数组的每一个元素是一个数组指针
    
    a[0] = (int *)malloc(rows * columns * sizeof(int));//分配存放rows * columns个int型数据的数组,a[0]加1则移动1个int型数据的空间,此处a[0]表示int型数据的地址
    
    for(i = 1;i < rows; i++)
    {
      a[i] = a[0] + i * columns;//每行有columns个int型元素,所以rows每加1,地址加i * columns 
    }

    ...
}