天天看點

C語言 自動存儲期和靜态存儲期

#include <stdio.h>

int x_a = 0;

void func(void) {
  static int x_b = 0;
  int x_c = 0;

  printf("%3d %3d %3d\n", x_a ++, x_b++, x_c++);
}

int main(void) {
  int i;

  puts("  ax  sx  fx");
  puts("------------");
  for (i = 0; i < 10; i++) {
    func();
  }
  
  return 0;

}      

運作結果:

C語言 自動存儲期和靜态存儲期

x_c = 0是因為 當函數func執行結束的時候變量x_c就消失了。它的變量壽命隻在func函數體中存在,每次調用函數結束後 x_c 會自動消失,是以x_c++ 不會增加該變量的值。

總結:

自動存儲期 靜态存儲期
生成 程式執行到對象聲明的時候建立出相應的對象 在程式執行開始執行的時候被建立出來
初始化 如果不顯示地進行初始化,則該對象會被初始化為不确定的值 如果不顯示地進行初始化,則該對象會被初始化為0
消失 執行到包含該聲明的程式塊的結尾時,該對象就會消失 在程式結束的時候消失
  1. 程式執行到對象聲明的時候就建立除了對應的對象。而執行到包含該聲明的程式塊的結尾,也就是大括号}的時候,該對象就會消失。
  2. 該對象擁有短暫的壽命,如果不對該變量進行初始化,則該對象會被初始化為不确定的值。
  1. 在程式開始執行的時候,具體地說是在main函數執行之前的準備階段被建立出來,在程式結束的時候消失。
  2. 該對象擁有 “永久”的壽命,如果不對該變量進行初始化,則該對象會自動初始化為0.