本文主要是介绍指针学习十三——指针动态分配内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
动态内存分布函数
定义在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
这篇关于指针学习十三——指针动态分配内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!