C语言动态分配多维数组

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

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 
    }

    ...
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值