常量区 常量 const int a=1;程序结束时释放
静态区 static 直到程序结束才会被释放内存
静态变量只会被初始化一次,生命周期从开始(预编译)到程序结束为止
栈 局部变量 int a=10;作用于代码块,出了代码块就释放
堆 自己申请的内存(malloc calloc realloc) 必须自己释放内存
为什么需要分配内存:
1.存储的数据需要延长生命周期
2.一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据,必须为指针变量分配内存空间,用malloc,引入stdlib.h
如何分配内存
char *name;
name=(char *)malloc(10*sizeof(char));
格式:malloc(需要对应数据类型空间的数量*sizeof(对应的数据类型)),前面需要对其声明,(数据类型*)
动态分配内存的本质:malloc函数在内存中申请了一片连续指定大小的空间单元格,然后返回那片连续单元格的首地址
name=(char*)realloc(name,20*sizeofz(char))//重新分配已经分配的动态内存
格式:realloc(需要重新分配的指针名,对应数据类型空间的数量*sizeof(对应的数据类型))
为了不浪费空间,程序结束之间需要释放申请的内存,free(name);
以上具体的使用会在实战篇中体现
|