在内存中有栈区、堆区、静态区,一般在函数的参数和变量都在栈区生成,但是栈区是有一定大小的,如果使用的栈区空间太多,会内存溢出。编译器也会提示把数据转到堆区存储 。堆区的大小很充裕,但是需要使用者手动申请。
一、malloc
void* malloc (size_t size);
申请堆区的空间,函数返回申请空间的首地址,因为是void*类型,所以要强制转换成自己需要的类型。
int *a=(int *)malloc(sizeof(int)*10);
这里申请40个字节的空间,让指针a指向这段空间。
二、calloc
void* calloc (size_t num, size_t size);
此函数跟malloc()函数非常类似,只不过多了一步,把申请的空间初始为了0
int a*=(int*)calloc(10,sizeof(int));
申请40个字节的空间,并初始化,让指针a指向这个空间首地址。
三、realloc
void* realloc (void* ptr, size_t size);
重新申请一段空间
int *p=(int*)malloc(40);
p=(int *)realloc(p,20);
p原来有40个字节的空间,发现40个字节多了,这里重新申请了20