如何开辟动态二维数组(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维的数组。

相关推荐

  1. C语言如何实现动态数组

    2024-04-12 23:16:05       17 阅读
  2. C语言数组

    2024-04-12 23:16:05       44 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-12 23:16:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-12 23:16:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-12 23:16:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-12 23:16:05       18 阅读

热门阅读

  1. 基于springboot的车辆管理系统源码数据库

    2024-04-12 23:16:05       20 阅读
  2. vue3表格编辑(数据回显)和删除功能实现

    2024-04-12 23:16:05       19 阅读
  3. 【NC23803】DongDong认亲戚

    2024-04-12 23:16:05       55 阅读
  4. 【华为OD机试C++】蛇形矩阵

    2024-04-12 23:16:05       17 阅读
  5. 【算法刷题day24】回溯算法+简单剪枝

    2024-04-12 23:16:05       75 阅读
  6. 虚拟线程和普通线程

    2024-04-12 23:16:05       15 阅读
  7. 递归神经网络(Recursive Neural Networks)

    2024-04-12 23:16:05       16 阅读