Saturday, January 21, 2012

變數生命期

變數又可以分為很多種,有不同的作用範圍和生命期,先分為

  • 廣域變數 Global Variable
    • 定義在所有函式的外面
  • 區域變數 Local Variable
    • 定義在某一函式裡面
其中,當遇到Local Variable和Global Variable同名時,會讀取到Local Variable的數值,直到Local
Variable的生命結束,才可用該名字讀Global Variable,而以下作法則是當兩者同名時,欲讀到Global Variable的作法:

#include <iostream>

using namespace std;

int x = 1;

int main(){

 int x = 2;

 cout << x << endl;
 cout << ::x << endl;

 return 0;
}

這程式會輸出"2 1"。

此外,Local Variable又有很多種Storage Classes,我會解釋為該資料型態的形容詞,這個形容詞敘述了它的生命期和作用範圍,以下列舉幾個介紹:

  • register:生命期是所屬的函式。建議程式把這變數放到較快的記憶體裡面,因為該變數可能要反覆讀取
  • auto:生命期是所屬的函式
  • static:生命期為整份程式
  • extern:生命期為整份程式
static會使得該變數在一份程式中只定義一次,之後就重複使用同一個變數。
#include <iostream>
using namespace std;

void print_num(int a){
 int num = 0;
 num += a;
 cout << num << endl;
}

void print_num_static(int a){
 static int num = 0;
 num += a;
 cout << num << endl;
}

int main(){

 int a=1;

 print_num(a);
 print_num_static(a);

 cout << endl;

 print_num(a);
 print_num_static(a);

 return 0;
}

output:

1
1

1
2