如何区分二维数组和动态二维数组?
- 内容介绍
- 文章标签
- 相关推荐
本文共计664个文字,预计阅读时间需要3分钟。
在伪原创语言中,创建二维数组的两种方法如下:
一种是通过直接申请一片连续的内存空间,然后在该空间中存储二维数组的元素。这样,二维数组的元素会依次存储在内存中,方便通过索引直接访问。
另一种方法是动态地扩展空间。这种情况下,二维数组的命名具有动态扩展空间的意义,可以根据需要动态地调整数组的大小。
两种二维数组的区别
C语言中,创建二维数组的方法有两种,一种是直接申请一片连续的空间,然后二维数组的数据依次存放在数组中。动态二维数组顾名思义,可以动态的扩展空间,用户可以自己输入行和列来进行二维数组的创建。下面分别介绍两种数组的区别。
二维数组
二维数组是行优先存放的,是在内存中连续存放,创建的代码如下所示,是一个三行四列的二维数组。
int ar[3][4] = { 12,23,34,45, 56,67,78,89, 90,100,110,120 };
动态二维数组
动态二维数组是需要用户自己开辟空间的,需要用到二级指针,这个二级指针指向的空间存放的是指向每一行的指针。 如图所示,二级指针指向一片空间,里面存放的是指向每一行的指针,需要用malloc申请空间,使用完记得释放空间,防止内存泄漏。
int** br = nullptr;int row = 0, col = 0;printf("请输入两个数:\n");scanf_s("%d %d", br = (int**)malloc(sizeof(int*) * row);//申请一个列大小的空间if (nullptr == br) exit(0);int n = 1;for (int i = 0; i < row; ++i){ br[i] = (int*)malloc(sizeof(int*) * col);//br[i] = *(br+i)if (nullptr == br[i]) exit(0);}
释放空间的代码
for (int i = 0; i < row; ++i)//三列,每一列保存的是每一行的首地址{ free(br[i]);//先把每一行的地址释放掉br[i] = nullptr;}free(br);return 0;
本文共计664个文字,预计阅读时间需要3分钟。
在伪原创语言中,创建二维数组的两种方法如下:
一种是通过直接申请一片连续的内存空间,然后在该空间中存储二维数组的元素。这样,二维数组的元素会依次存储在内存中,方便通过索引直接访问。
另一种方法是动态地扩展空间。这种情况下,二维数组的命名具有动态扩展空间的意义,可以根据需要动态地调整数组的大小。
两种二维数组的区别
C语言中,创建二维数组的方法有两种,一种是直接申请一片连续的空间,然后二维数组的数据依次存放在数组中。动态二维数组顾名思义,可以动态的扩展空间,用户可以自己输入行和列来进行二维数组的创建。下面分别介绍两种数组的区别。
二维数组
二维数组是行优先存放的,是在内存中连续存放,创建的代码如下所示,是一个三行四列的二维数组。
int ar[3][4] = { 12,23,34,45, 56,67,78,89, 90,100,110,120 };
动态二维数组
动态二维数组是需要用户自己开辟空间的,需要用到二级指针,这个二级指针指向的空间存放的是指向每一行的指针。 如图所示,二级指针指向一片空间,里面存放的是指向每一行的指针,需要用malloc申请空间,使用完记得释放空间,防止内存泄漏。
int** br = nullptr;int row = 0, col = 0;printf("请输入两个数:\n");scanf_s("%d %d", br = (int**)malloc(sizeof(int*) * row);//申请一个列大小的空间if (nullptr == br) exit(0);int n = 1;for (int i = 0; i < row; ++i){ br[i] = (int*)malloc(sizeof(int*) * col);//br[i] = *(br+i)if (nullptr == br[i]) exit(0);}
释放空间的代码
for (int i = 0; i < row; ++i)//三列,每一列保存的是每一行的首地址{ free(br[i]);//先把每一行的地址释放掉br[i] = nullptr;}free(br);return 0;

