其他分享
首页 > 其他分享> > 动态数组笔记

动态数组笔记

作者:互联网

博客开头先提到一点:由于我异常的弱 ,所以这个部分更倾向于实用而不是介绍理论。
来让我们从动态数组的第一个函数开始:
malloc:
这个函数的原型是:
void*malloc(unsigned int size);
这个函数使用时需要先定义一个特定的类型,再用这个类型接受这个开辟的空间。
来个完成的开辟的例子吧

#include<stdio.h>
#include<stdlib.h>//忘了提到了,用动态数组时必须用这个头文件
int main()
{
	int*p=NULL;
	int n;
	scanf("%d",&n);//实现了想开辟几个就开辟几个的特点
	p=(int*)malloc(n*sizeof(int));

马后炮:这个程序的最后一行还应当进行详细解释:
(int*)代表着我要把他改成int型,如果我要float型,那就应该是(float*)。
(nsizeof(int))是因为在不同的操作系统中,可能每种字符的长度并不相同,所以需要增强程序可移植性。
接下来介绍他的孪生弟兄:calloc
孪生弟兄就是个进化版,它会把最开始的开辟的空间都初始化成0。
但使用时有点不相同—还是上面的例子:
(int
)calloc(n,sizeof(int));
这样就很清晰了,只是把需要开辟的空间单独拎到前面了而已。
当然,动态数组必然可惜随时更改啊:这就要引出我们可爱的realloc。
还是之前的那了例子:realloc(voidp,100sizeof(int))
这样我们就改变了这个空间。
二维数组的空间开辟也是同理:
只是开辟了一个nm的空间而已,只举一个例子:
(int
)malloc(mnsizeof(int));
开辟的过程可能会出现错误,所以我们一定要判断开辟的空间的指针是否是空指针

if(p==NULL)
	exit(1)//如果是空指针,就要退出程序

内存的释放:
很简单 free函数:()里放的是指针p。
最后给出mooc上的一个代码:
这个题的目的是编程输入m个班学生(每个班n个学生)的某门课成绩,计算并输出平均分。

#include<stdio.h>
#include<stdlib.h>
void InputArray(int*p,int m,int n);
double Average(int*p,int m,int n);
int main()
{
	int *p=NULL,m,n;
	double aver;
	printf("%d",&m);
	scanf("%d",&m);
	p=(int*)calloc(m*n,sizeof(int));
	if(p==NULL)
	{
		printf("No enough memory!\n");
		exit(1);
	}
	InputArray(p,m,n);
	aver=Average(p,m,n);
	printf("aver=%.1f\n",aver);
	free(p);
	return 0;
}
void InputArray(int *p,int m,int n)
{
	for(int i=0;i<m;i++)
	{
		printf("Please enter scores of class %d:\n",i+1);
		for(int j=0;j<n;j++)
		{
			scanf("%d",&p[i*n+j]);
		}
	}
}
double Average(int*p,int m,int n)
{
	int sum=0;
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<n;j++)
		{
			sum=sum+p[i*n+j];
		}
	}
	return (double)sum/(m*n);
}

好了,菜鸡对动态数组的介绍到此结束,由于我本人并不知道是否完全正确,如果有错误,请批评指出。
return code;

标签:动态,int,sum,笔记,数组,printf,include,开辟
来源: https://blog.csdn.net/LIUCOSMOSSUN/article/details/111700064