全局變量的優缺點:
1) 全局變量過多會佔用更多的內存(因爲其生命期長)
2) 提高了耦合性,牽一髮而動全身,時間久了,代碼長了,就不知道全局變量被哪些函數改過。
3) 提高了模塊間的耦合性,對後期維護、拓展和複用都帶來極大影響。
4) 使用全局變量程序運行時速度會更快一些(因爲內存不需要再分配)
5) 便於傳遞參數。
對於全局變量的初始化:
全局變量在系統載入程序時就已經初始化爲指定值或者是默認值(一般是0一類的)
C 標準:全局變量(external variable)和靜態變量 (static variable)的顯示初始化式必須爲常量表達式 。
// test.c 關於 C 標準下情況
#include <stdlib.h>
int a = 10;// 正確
int b = a;// 這裏會編譯錯誤:error: initializer element is not constant 即:初始化式不是常量
int c = a + 10;// 這裏會編譯錯誤:error: initializer element is not constant 即:初始化式不是常量
char* pStr = (char*)malloc(10 * sizeof(char));// 這裏會編譯錯誤:error: initializer element is not constant 即:初始化式不是常量
int d;
d = 10;// 對於採用賦值方式情況:C 編譯器可能提示警告,有的 C 編譯器可能提示錯誤。
int main() {
return 0;
}
// test.cpp 關於 C++ 標準下的情況
#include <cstdlib>
int a = 10;// 正確
int b = a;// 正確
int c = a + 10;// 正確
char* pStr = (char*)malloc(10 * sizeof(char));// 正確
char* pStr2 = new char[10];// 正確
int d;
d = 10;// 對於採用賦值方式情況:C++ 給出編譯錯誤:error: 'd' does not name a type
int main() {
return 0;
}
總結:
1. 對於 C 和 C++ 全局變量,只能對其採用初始化的方式,而不能採用賦值的方式。
2. C 語言中全局變量和靜態變量的初始化必須是一個常量表達式,因此也不能動態分配;而在 C++ 中是可以的。