局部变量、静态局部变量、全局变量、全局静态变量、字符串常量以及动态申请的内存区
局部变量存储在栈中 全局变量、静态变量(全局和局部静态变量)存储在静态存储区 new申请的内存是在堆中 字符串常量也是存储在静态存储区 栈中的变量内存会随着定义所在区间的结束自动释放;而对于堆,需要手动free,否则它就一直存在,直到程序结束; 对于静态存储区,其中的变量常量在程序运行期间会一直存在,不会释放,且变量常量在其中只有一份拷贝,不会出现相同的变量和常量的不同拷贝。 #include <iostream>#include <cstdlib> using namespace std; //返回的是局部变量的地址,该地址位于动态数据区,栈里 char *s1() { char* p1 = "qqq";//为了测试‘char p[]="Hello world!"’中的字符串在静态存储区是否也有一份拷贝 char p[]="Hello world!"; char* p2 = "w";//为了测试‘char p[]="Hello world!"’中的字符串在静态存储区是否也有一份拷贝 printf("in s1 p=%p\n", p); printf("in s1 p1=%p\n", p1); printf("in s1: string's address: %p\n", &("Hello world!")); printf("in s1 p2=%p\n", p2); return p1; // 这里不能返回局部变量 p } //返回的是字符串常量的地址,该地址位于静态数据区 char *s2() { char *q="Hello world!"; printf("in s2 q=%p\n", q); printf("in s2: string's address: %p\n", &("Hello world!...