来个例子吧,动态数组求最大值 其实动态开辟数组就是为了节省空间而已
#include<stdio.h>
#include<malloc.h>
int max(int *r,int n)
{
int max=r[0];//假设一个最大值
for(int i=0;i<n;i++)
{
if(max<r[i])
{
max=r[i];
}
}
return max;
}
int main()
{
int n,i;
scanf("%d",&n);
int *p=NULL;//先定义p为空指针
p=(int *)malloc(n*sizeof(int));//这个的意思就是长度为n,且每个都是int字节
for(i=0;i<n;i++)
{
scanf("%d",&p[i]);//输入进数组
}
printf("%d",max(p,n));
free(p);//释放动态空间
return 0;
}
在这里我要介绍的还有calloc,realloc以及calloc和memset的区别
calloc使用后会使申请的空间全置0,这一点和memset一样,memset的头文件是string.h
他俩的使用方式我呈现以下(int *)calloc(5,sizeof(int)),memset(a,0,sizeof(a)),都是起到将数组进行初始化的目的,而我认为memset更胜一筹,它不仅可以初始化数组为0,还可以初始化为任何值
realloc呢,使用在你发现开辟的数组小了,那你还是可以挽回的。
重新开辟一个大的
比如 int*p=(int *)malloc(10,sizeof(int))开小了 在后面加p=(int *)realloc(p,100*sizeof(int));