如何开辟动态二维数组(C语言)

1. 开辟动态二维数组

C语言标准库中并没有可以直接开辟动态二维数组的函数,但我们可以通过动态一维数组来模拟动态二维数组。

二维数组其实可以看作是一个存着"DataType []"类型数据的一维数组,也就是存放着一维数组地址的一维数组。

所以,我们就可以动态开辟一个数组指针数组,再为每一个元素动态开辟一个一维数组的空间,以此来模拟动态二维数组。

但是,数组指针数组似乎也不太好开辟,或者说开辟完后不太符合我们的预期,因为其元素的类型为"DataType [n]",所指定的一维数组的大小无法修改。

所以,我们一般用" DataType* "来代替"DataType [n]",而动态二维数组的类型也被我们定义为" DataType** "。

#include <stdlib.h>
typedef int DataType

int main()
{
    int m = 5;
    int n = 4;

    DataType** TDarr = (DataType**)malloc(sizeof(DataType*) * m);
    for(int i = 0; i < m; i++)
    {
        TDarr[i] = (DataType*)malloc(sizeof(DataType) * n);
    }
}

2. 注意事项

由于各个一维数组是分别动态开辟的,所以它们在内存中并不是连续存放的。

我们在使用动态二维数组时,无论是通过"DTarr[i][j]"的方式,还是通过" *(*(DTarr+i)+j) "的方式来访问元素都是没有问题的,因为这两种方式都是通过元素之间的逻辑关系来访问。

但是,如果我们像在传统二维数组中一样,通过" *(DTarr+i+j) "的方式来访问则会发生错误(访问到错误元素或越界访问),这就是由于二者的物理结构不同。

通过定义动态二维数组的思想,我们可以类比定义出动态n维的数组。

  • 28
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大筒木老辈子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值