C语言如何使用malloc动态申请数组

前言

写这篇文章是因为在做C语言题目时,发现有时需要设立动态数组才能较好的解决问题,而我所用的vs2019却不支持直接设立,就比如

int n;
int a[n];

这是不被允许的,而且也会出现许多问题,所以我百度了一下,可以通过malloc函数设立动态数组,所以写此文章分享一下学习的经历,并且给一些不是很了解如何用malloc动态申请数组的同学提供一个思路。我相信有很多人也跟我有相同的问题,希望这篇能帮助你更好的理解此类问题。

正文

1.何为malloc()函数

malloc()函数为一个分配内存的函数,其会找到合适的空闲内存块,但是不会为其赋名。它会返回动态分配内存块的首字节地址,所以我们可以把该地址赋给一个指针变量,并使用指针返回这块内存。

2.用malloc()创建数组

double * grade;
grade=double *)malloc(sizeofdouble));

该例子便是定义了一个double类型的指针grade,然后一个double类型的值请求内存空间,设置grade指向该位置。
(double *)是强制转换,因为我们定义的grade为double类型,所以malloc的返回类型也要强制转换为double类型,要相匹配。
所以,使用malloc()函数可以创建动态数组,可以在程序运行时选择数组的大小和分配内存。
如:

grade=double *malloc(n * sizeof(double));

这样,我们就可以在前面定义n,然后输入n的值,从而构建一个一维数组为动态的。
二维便是先分配行,再分配列,类比一维。

代码

最后,便放一个当时作业的那个代码,帮助理解一下这个用法。

#include
#include
int main()
{
	int number1=0,number2=0,number;
	float average, sum=0;
	float* grade=0;
	printf("请输入学生个数:");
	scanf_s("%d", &number);
	grade = (float*)malloc(sizeof(float) * number);
	if (grade == NULL)
	{
		exit(EXIT_FAILURE);
	}
	printf("请输入每个学生的成绩:");
	for (int i = 0; i <= number-1; i++)
	{
		scanf_s("%f", &grade[i]);
		sum = sum + *(grade + i);
		if (*(grade + i) >= 90)
			number1++;
		if (*(grade + i) < 60)
			number2++;
	}
	average = sum / number;
	printf("平均成绩为:%f\n优秀人数有:%d\n不及格的人数有:%d", average, number1, number2);
	free(grade);
	return 0;
}

后记

本人也是初学者,可以将就看一下,有啥不懂的或者我这篇文章还有啥问题也可以评论或者私信向我提出,共同进步。

聿辞
2021年5月14日

你可能感兴趣的:(c语言学习记录,c语言)