电力公司在哪个网站做推广最好,网站外链隐形框架,受和攻不停的做漫画网站,做网站做好用的软件1. 开辟动态二维数组
C语言标准库中并没有可以直接开辟动态二维数组的函数#xff0c;但我们可以通过动态一维数组来模拟动态二维数组。
二维数组其实可以看作是一个存着DataType []类型数据的一维数组#xff0c;也就是存放着一维数组地址的一维数组。
所以但我们可以通过动态一维数组来模拟动态二维数组。
二维数组其实可以看作是一个存着DataType []类型数据的一维数组也就是存放着一维数组地址的一维数组。
所以我们就可以动态开辟一个数组指针数组再为每一个元素动态开辟一个一维数组的空间以此来模拟动态二维数组。
但是数组指针数组似乎也不太好开辟或者说开辟完后不太符合我们的预期因为其元素的类型为DataType [n]所指定的一维数组的大小无法修改。
所以我们一般用 DataType* 来代替DataType [n]而动态二维数组的类型也被我们定义为 DataType** 。
#include stdlib.h
typedef int DataTypeint 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]的方式还是通过 *(*(DTarri)j) 的方式来访问元素都是没有问题的因为这两种方式都是通过元素之间的逻辑关系来访问。
但是如果我们像在传统二维数组中一样通过 *(DTarrij) 的方式来访问则会发生错误访问到错误元素或越界访问这就是由于二者的物理结构不同。
通过定义动态二维数组的思想我们可以类比定义出动态n维的数组。