静态存储区:函数内 和 类内 static 成员。还有定义在函数外的变量
栈区:函数内的非static 变量
NOTE: 分配在静态存储区和栈内存中的对象由编译器自动创建和销毁。对于占内存对象在程序运行时才存在,对于static 对象在使用之前分配,在程序结束时销毁。
自由空间/堆:程序用堆来存储动态分配的对象。动态分配对象的生存周期由程序来控制。动态对象不再使用时,我们的代码必须显式的销毁他他们。
char* p 和 char p[] 区别:
https://blog.csdn.net/codetz/article/details/51204837
char* p="hello1";
char a[]="hello2";
”hello1”与”hello2”都是字符串常量在常量存储区,不过字符串常量”hello2”赋值给了一个局部变量(char []型数组)。字符串常量”hello2”在内存就有两份拷贝了,一个在动态分配的栈中,一个在常量存储区中。p[2]=’A’是对常量存储区中的字符串”hello1”进行修改,这肯定是不行的,而a[2]=’A’就可以了,它是对栈中的char型数组a进行修改。