常用的内存开辟:
常用的int、long、char类型与输出开辟的空间,开辟出来的来空间大小是固定的。
int a;//在栈空间开辟的空间为四个字节
char a;//在栈空间开辟的空间为一个字节
short a;//在栈空间开辟的空间为两个字节
long a;//在栈空间开辟的空间为八个字节
int arr[10]={0};//在栈空间上开辟40个字节连续的空间
动态内存开辟函数:
malloc函数:void* malloc(size_t size);
malloc函数基本作用为向内存申请连续可用的空间,并返回指向这亏空间的指针。
如果开辟成功,贼返回一个指向开辟好空间的指针。
如果开辟失败,则返回一个空指针,所以在使用malloc函数一般使用if函数判断函数返回值。
int *p=(int *)malloc(40);//开辟为10个整型的空间
//因为返回类型为void*,所以具体类型要自己设定
if(p==NULL)
{
printf("%s\n",strerror(errno));
return 0;
}
free函数:void free(void *ptr);
free函数的作用是用来释放动态开辟的内存空间。
calloc函数:void *calloc(site_t num,size_t size);
calloc函数功能是为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为0。
int *p=(int *)calloc(10,sizeof(int));//开辟10个整形大小的空间
int *p=(int *)malcoc(40);//开辟10个整形大小的空间
malloc函数与calloc函数同样是开辟了40个字节的空间,但是两个函数的区别在于calloc开辟的空间会把每个自己字节初始化为0。
所以如果对开辟的空间初始值有要求,一般使用malloc函数,自己定义空间初始值,没有过多要求的可以使用calloc函数来开辟空间。
realloc函数:void* realloc(void * ptr,size_t size);
realloc函数作用是对内存大小进行调整。
而realloc在增容调整时可能会出现两种情况:
1.原有空间之后又足够大的空间进行增容。
2.原有空间之后没有足够大的空间进行增容。
出现情况1时,增容不会导致原来空间数据的变化,而情况2,增容情况时在堆空间上另找一个足够大的连续空间来使用,所以函数返回值为一个新的内存空间。
当出现情况2时,如果直接把增容空间赋给原有空间,当增容失败返回NULL指针,会丧失原有数据,所以在使用realloc函数是要验证增容空间是否为空指针,在进行赋值。