C语言实现动态二维数组的开辟
C语言实现二维数组的动态开辟
要想实现二维数组的动态开辟,必须先要会使用malloc函数。(void* )malloc(size_t size),这个函数向内存申请一段连续的空间,并返回指向这块空间的指针。所返回的指针类型为void* .我们可以借助这个函数动态开辟一维数组。
int main()
{
int n;
scanf("%d", &n);
int* arr = (int*)malloc(sizeof(int)*n);//将malloc的返回值强制类型转换为int*
for (int i = 0; i < n; i++)
{
arr[i] = i;
}
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
因为动态开辟的内存是在堆区申请的空间,所以最后要使用free函数对内存进行释放。
`
好了,简单了解过一维数组的开辟后,我们来看一下二维数组的开辟。假设要开辟n行m列的二维数组,我们可以理解为先开辟一个有n个元素的数组,数组里的每一个元素都为一级指针,每一个一级指针都指向一块空间,这块空间有m个整数,这块空间同样需要动态开辟。
由图中可以看出,第二次要开辟n次,因此用for循环进行第二次的开辟
#include <stdio.h>
void main()
{
int n = 0;
scanf("%d", &n);
int** arr1 = NULL;
arr1 = (int**)malloc(sizeof(int*)*n);
int m = 0;
scanf("%d", &m);
for (int i = 0; i < n; i++)
{
*(arr1 + i) = (int*)malloc(sizeof(int)*m);
}
for (int i = 0; i < n; i++)
{
for (int h = 0; h < m; h++)
{
*((*(arr1 + i))+h) = h+i;//对二维数组初始化
}
}
for (int i = 0; i < n; i++)
{
for (int h = 0; h < m; h++)
{
printf("%d", arr1[i][h]);//打印二维数组
}
printf("\n");
}
free(arr1);
}