全局变量:
1)具有外部链接性。如果你在一个.h里写 int a;,那每个包含这个头文件的文件都相当于写了这行代码,编译时就会报错“重复定义的符号”。正确的做法是在.h先声明这个变量:extern int a;然后某个一个cpp里定义它:int a = 0;。同理你在使用这个变量时可以直接包含上面的.h,也可以不包含.h,直接在cpp中声明这个变量(extern int a),然后使用它。
2) 和全局静态变量一样,被分配在静态存储区。
全局静态变量
1)具有内部链接性。如果你在一个.h里写static int a =0;,那相当于每个包含这个头文件的文件都写了这行代码,但是不会报错,他们只是名字相同而彼此之间没什么关系。就是说你在a.cpp里把a赋值为10,打印a为10;在b.cpp里打印a仍然为0。
2)全局变量,全局静态变量,局部静态变量都被分配在静态存储区。普通的局部变量存放在栈区,new出来的变量存放在堆中。