1.内存
2.对于随时改变大小的类型,为了避免浪费或者不足,动态内存分配随之出现。
3.动态内存分配函数
- malloc: Allocates memory blocks 函数原型 void* malloc(size_t size);
- free:Deallocates or free a memory block 函数原型 void free(void *memblock);
- 举例应用
int main()
{
int* p=(int*)malloc(10*sizeof(int));//向内存申请10个整形的内存空间
if(p==NULL)
{
//打印开辟失败的原因
printf("%s\n",strerror(errno));
}
else
{
int i=0;
for(i=0;i<10;i++)
{
*(p+i)=i;
}
for(i=0;i<10;i++)
{
printf("%d",*(p+i));
}
}
//使用完毕后
free(p);//free函数用来释放动态开辟的空间
p=NULL;//p虽然被释放了,但是p还是能找到原来的空间,所以最好指向空指针
return 0;
}
- calloc:Allocates an array in memory with elements initialized to 0
- 函数原型:void* calloc(size_t num,szie_t size);
int main()
{
int *p=(int*)calloc(10,sizeof(int));
if(p==NULL)
{
printf("%d",strerror(errno));
}
else
{
int i=0;
for(i=0;i<10;i++)
{
printf("%d",*(p+i));
}
}
free(p);
p=NULL;
return 0;
}
- realloc:Reallocate memory blocks
- 函数原型:void* realloc(void* memblock,szie_t size);
- memblock: Pointer to previously allocated memory block
- size:New size in bytes
int main()
{
int *p=(int*)malloc(20);
if(p==NULL)
{
printf("%d",strerror(errno));
}
else
{
int i=0;
for(i=0;i<5;i++)
{
*(p+i)=i;
}
}
int *ptr=realloc(p,40);//调整原来动态申请的空间 有足够的空间时,直接追加,返回旧p
//当空间特别大时,则会重新找内存区域,并拷贝原来数据,释放旧内存,返回新开辟的内存空间
//得用新的变量接受realloc
if(ptr!=NULL)
{
p=ptr;
for(i=5;i<10;i++)
{
*(p+i)=i;
}
for(i=0;i<10;i++)
{
printf("%d",*(p+i));
}
}
free(p);
p=NULL;
return 0;
}