栈区,堆区,全局区(静态区),字符常量区
栈区:
存放所有局部变量。
局部变量:定义在作用域内的变量、函数的形参。
作用域:{}
生命周期:出生:定义时 消亡:作用于结束时
使用范围:所声明的作用域内。
堆区:
手动申请的空间。
生命周期:出生:手动申请时 消亡:手动释放时
使用范围:整个程序。
特性:申请的空间是连续的。
申请需用到malloc函数:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int* p = malloc(4);
*p = 100;
printf("%d\n", *p);
char* pp = malloc(4);
pp[0] = 'a';
pp[1] = 'b';
pp[2] = 'c';
pp[3] = 'd';
for (int i = 0; i < 4; i++)
{
printf("%c\n", pp[i]);
}
free(p);
free(pp);
return 0;
}
注意free回收空间要符合分配空间,同一块空间不能释放两次。
全局变量区:
存储全局变量和静态变量。
还分为两个区域:数据段和BSS
数据段:存初始化过的全局、静态变量。
BSS:存未初始化过的全局、静态变量。
全局变量:
全局变量:定义在作用于外的变量。
生命周期:出生:程序运行时 消亡:程序结束时
使用范围:整个程序。
特性:默认初始化为0。
静态变量:
静态变量:static修饰的变量。
生命周期:出生:程序运行时 消亡:程序结束时
使用范围:全局静态变量:所在文件内
局部静态变量:所在作用域内
特性:默认初始化为0,只初始化一次。
字符常量区:
存放程序执行代码,字符串常量也属于这部分。
生命周期:出生:程序运行时 消亡:程序结束时