两种二维数组的区别C语言中,创建二维数组的方法有两种,一种是直接申请一片连续的空间,然后二维数组的数据依次存放在数组中。动态二维数组顾名思义,可以动态的扩展空间,用
两种二维数组的区别
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;