21、變量的作用域與生存期


   當局部變量與全局變量同名時,局部變量在其作用域中優先。

  關於生存期的問題,在 C 語言中,存儲變量的內存空間被分為靜態與動態兩種類型。存儲在靜態存儲區域的變量,在程序運行初期就被創建,一直到程序運行結束之後才會被撤銷。因此,相對於程序來講,這類變量的生存期是永久的,而存儲在動態存儲區域的變量,是在程序運行時,由程序動態創建的,因此,這類變量的生存期是短暫的。

  在 C 語言中,用以下關鍵字來指定變量的存儲類型:

  1、auto:變量作用域是局部的,生存期是短暫的。

  2、extern:變量作用域是全局的,生存期是永久的。

  3、static:變量作用域可以是全局的,也可以是局部的,但它的生存期是永久的。

  4、register:變量作用域是局部的,生存期是短暫的。

作為static 類型的 int、double、float 型變量在默認初始化時都會被初始化為 0。例如:  


#include<iostream>
using namespace std;
void show()
{
static int x; //靜態變量
x++;
cout<<x<<endl;

}

void main()
{
int i;
for (i=0;i<5;i++)
{
show();
}
}


static int x 改為 static int x=1 後,觀察到每次調用 show() 函數,並沒有重新為 x 賦值為 1。


#include<iostream>
using namespace std;
void show()
{
static int x=1;
x++;
cout<<x<<endl;

}

void main()
{
int i;
for (i=0;i<5;i++)
{
show();
}
}

作為全局變量的 int、double、float 型變量在默認初始化時也都會被初始化為 0。例如:



#include<iostream>
using namespace std;
int x; //全局變量
void main()
{
int i;
for (i=0;i<5;i++)
{
x++;
cout<<x<<endl;
}
}


局部變量的 int 型變量系統不會默認為其初始化。例如:


#include<iostream>
using namespace std;

void main()
{
int x; // 局部變量
int i;
for (i=0;i<5;i++)
{
x++; //使用錯誤
cout<<x<<endl;
}
}

0 個評論

要回覆文章請先登錄註冊