Bootstrap

C语言实现动态二维数组的开辟

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);
}

在这里插入图片描述

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;