堆空间中的动态分配

1. malloc( )
(1)调运格式

 指针变量=(数据类型*)malloc(存储单元个数 * 每个存储单元的字节数);

(2)例如:

double*p;
p=(double*)malloc(5*sizeof(double));

通过调运malloc( )函数,向系统动态申请了5个double类型的存储空间,一共是40B。
系统将这40B存储空间的首地址赋值给指针p,可以理解为指针p指向了一个double型的存储单元。
(3)必须检测返回值的有效性,如果开辟空间失败返回空指针。

if(NULL==p)
{
    printf("malloc error\n");
    return -1;
}

2.calloc( )
(1)调运格式

指针变量=(数据类型*)calloc(存储单元个数,每个存储单元的字节数);

(2)例如:

double*p;
p=(double*)calloc(5,sizeof(double));

通过调运calloc( )函数,同样向系统动态申请了5个double型的存储空间,并且将p 指针指向该存储空间的首地址。
3.realloc( )
(1)调运格式

void*realloc(void*ptr,size_t size);

(2)功能:
a.若ptr==NULL,则该函数等同于malloc。

double*p;
p=(double*)realooc(NULL,5);

b.扩容空间

char*ptr=malloc(100);
if(NULL==ptr)
    return -1;
char*Newptr=realloc(ptr,200);
if(NULL==p)
{
    printf("realloc error\n");
    return -1;
}
//将100字节的空间扩容为200

**注:**Newptr和ptr有可能相等,也有可能不等,所以只使用realloc的返回指针。
堆空间中的动态分配_第1张图片
4.动态释放
当动态申请的存储单元不在使用时,应将这些存储单元释放掉,即将存储空间归还给操作系统。

free(指针变量);

你可能感兴趣的:(c语言)