动态内存分布函数
定义在stdlib.h里
- 1.动态存储分配函数malloc( )
void *malloc(unsigned size)
再内存的动态存储中分配一连续空间,长度为size。申请成功,返回指向所分配内存空间的
的起始地址的指针;否则返回NULL;
//动态分配n个整数类型大小的的空间,调用malloc时,利用sizeof计算存储块大小
if((p= (int *)malloc(n*sizeof(int)))==NULL){
printf("Not able to allocate memory, \n");
exit(1);
}
- 2.计数动态存储分配函数calloc( )
void *calloc(unsigned n,unsigned size)
在内存的动态存储区中分配n个连续空间,每一存储空间的而长度为size,并且分配后还把存储块
里全部初始化为0。申请成功,返回指向所分配内存空间的的起始地址的指针;否则返回NULL;
- 3.动态存储释放函数free()
viod free(void *ptr)
盛放动态存储分配函数申请到的整块内存空间,ptr为指向要释放空间的首地址。
释放后不允许再通过该指针去访问已经释放的块。
- 4.分配调整函数realloc()
void *realloc(void *ptr,unsigned size)
更改以前的存储分配。ptr必须是以前通过动态存储分配得到的指针。参数size为现在
需要的空间大小。分配失败,返回NULL;分配成功,返回一片能存放大小为siza的区块。
//动态分派内存指针求和
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,sum,i,*p;
printf("enter n: ");
scanf("%d",&n);
//为数组p动态分配n个整数类型大小的空间
//动态内存申请的是一个没有名字、只有首地址的连续存储空间
if((p=(int *)calloc(n,sizeof(int)))==NULL)//申请存放n个int型数据的内存单元
{
printf("not able to allocate memory.\n");
exit(1);
}
printf("enter %d intergers:",n);
for(i=0;i<n;i++)
scanf("%d",p+i);
sum=0;
for(i=0;i<n;i++)
sum=sum+*(p+i);
printf("The sum is %d \n",sum);
free(p); //动态存储释放函数
return 0;
}
//enter n: 5
//enter 5 intergers:1 2 3 4 5
//The sum is 15
//动态分配内存指针冒泡排序,有点问题,后续改正
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,j,m,k,*p;
printf("enter n: ");
scanf("%d",&n);
p= (int *)calloc(n,sizeof(int));
if(p==NULL)
{
printf("Not able to allocate memory, \n");
exit(1);
}
printf("enter %d intergers:",n);
for(i=0;i<n;i++)
scanf("%d",p+i);
for(j=1;j<n;j++){
for(k=0;k<n-j;k++){
if(*(p+j)>*(p+j+1)){
m=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=m;
}
}
}
for(i=0;i<n;i++)
printf("%d ",*(p+i));
printf("\n");
free(p);
return 0;
}
//enter n: 5
//enter 5 intergers:5 4 3 2 1
//5 3 2 1 0