為什麼在 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);

更新於: 2020 年 6 月 26 日

3K+ 瀏覽

開啟你的 職業生涯

完成課程獲得認證

開始吧
廣告