手把手教你如何用malloc申请动态内存

前言
座右铭:talk is easy,show me the code.
我们生活在幸福的时代,我们都站在巨人的肩膀上看世界

一点儿小故事

你有没有像我一样曾经这样申请内存:
int **a=(int **)malloc(n*sizeof(int ));
这样是不行的,int**类型的变量只能指向存放int*类型的数据内存单元
曾经我也如此疯狂过啊~

为什么要申请动态内存?

在C语言中,数组必须是定长的申请内存,不允许出现a[n]这样的情况,n不允许为变量,而动态申请内存却可以弥补这一缺点,不仅如此,通过申请动态内存,我们还可以申请多维内存,在做一些题目的时候数组无法通过,通过动态申请内存的数组却可以通过。

申请一维动态内存(连续的)

相信大家都知道如何使用malloc的,不懂的点击下方的链接了解一下?
malloc的一些使用方法
相信大家都可以理解这里,不再赘述。

#include<stdio.h>
#include<malloc.h> 
int main()
{
	int *a;
	int n;
	//输入你要存放多少个元素 
	scanf("%d",&n); 
	//申请足够存放n个元素的内存单元 
	a=(int *)malloc(n*sizeof(int));
	for(int i=0;i<n;i++)
	{
		scanf("%d",a+i);
		printf("%d\n",a[i]);
	} 
	return 0;
}

动态申请二维数组(连续的)

我们以申请一个m行n列的数组为例。
int **a=(int **)malloc( m *sizeof(int *));
这一行相当于申请行内存
a[i]=(int *)malloc(n * sizeof(int *));
这一行相当于为第i+1行申请n列元素
在这里插入图片描述;
在这里插入图片描述

示例

#include<stdio.h>
#include<malloc.h> 
int main()
{
	int m ,n;
	scanf("%d%d",&m,&n);
	//申请行元素
	int **a=(int **)malloc(m*sizeof(int *));
	for(int i=0;i<m;i++)
	{
	//申请第i+1行的m个元素
		a[i]=(int *)malloc(n*sizeof(int *));
		for(int j=0;j<n;j++)
		{
			a[i][j]=i*10+j;
		}
	}
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			printf("%2d  ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

运行结果

[(https://img-blog.csdnimg.cn/20200410224447375.png)

例题拓展

通过上例我们可以看几个竞赛例题来活学活用一下。
用malloc解题

由于水平有限,本博客难免有不足,恳请各位不吝赐教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值