今天刚学习了动态内存函数的使用,做个练习记录下
练习一:
使用动态内存分配函数 对两个有序数组进行合并后再以升序输出(这里排序用了qsort函数,也当复习了)
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
int cmp_int(const void*e1,const void*e2)
{
return *(int*)e1-*(int*)e2;
}
int main()
{
int n,m;
scanf("%d%d",&m,&n);
int*pm;
int*pn;
pm=(int*)malloc(m*sizeof(int));//为数组m申请内存
pn=(int*)malloc(n*sizeof(int));//为数组n申请内存
if(pm==NULL||pn==NULL)//如果malloc申请内存失败,返回空指针,则显示错误信息,结束程序
{
printf("%s\n",strerror(errno));
return 0;
}
int i;
for(i=0;i<m;i++)
{
scanf("%d",pm+i);//向m数组输入数据
}
for(i=0;i<n;i++)
{
scanf("%d",pn+i);//同上
}
int*pr;
pr=(int*)realloc(pm,(n+m)*sizeof(int));//使用realloc申请一块可存放m+n个整型空间
if(pr!=NULL)//判断申请成功,将得到的地址赋给m数组。
{
pm=pr;
}
for(i=0;i<n;i++)//在m数组后追加n数组的值
{
*(pm+i+m)=*(pn+i);
}
qsort(pm,m+n,sizeof(int),cmp_int);//使用qsort函数进行排序 (复习qsort的用法)
for(i=0;i<m+n;i++)
{
printf("%d ",*(pm+i));
}
free(m);//释放申请的内存空间,并将pm赋为空指针
pm=NULL;
return 0;
}