為什麼在 C/C++ 中,全域性變數和靜態變數初始化為其預設值?
全域性變數和靜態變數之所以要初始化為預設值,是因為這是 C 或 C++ 標準中的要求,同時還可以免費在編譯時分配一個 0 值。靜態變數和全域性變數對生成的物件程式碼的行為相同。這些變數在 .bss 檔案中分配,並在載入時根據分配給變數的常量,為其分配記憶體。
下面是一個全域性變數和靜態變數的示例。
示例
#include <stdio.h> int a; static int b; int main() { int x; static int y; int z = 28; printf("The default value of global variable a : %d", a); printf("\nThe default value of global static variable b : %d", b); printf("\nThe default value of local variable x : %d", x); printf("\nThe default value of local static variable y : %d", y); printf("\nThe value of local variable z : %d", z); return 0; }
輸出
The default value of global variable a : 0 The default value of global static variable b : 0 The default value of local variable x : 0 The default value of local static variable y : 0 The value of local variable z : 28
在上面的程式中,全域性變數在 main() 函式外部宣告,其中一個為靜態變數。聲明瞭三個區域性變數,並初始化了變數 z。
int a; static int b; …. int x; static int y; int z = 28;
列印了它們的預設值。
printf("The default value of global variable a : %d", a); printf("\nThe default value of global static variable b : %d", b); printf("\nThe default value of local variable x : %d", x); printf("\nThe default value of local static variable y : %d", y); printf("\nThe value of local variable z : %d", z);
廣告