static變量的做用

在C語言中,關鍵字static的意思是靜態的,有3個明顯的做用:ios

1. 在函數體內,靜態變量具備記憶做用,即一個被聲明爲靜態的變量在這一函數被調用的過程當中其值維持不變。
2. 在模塊內(但在函數體外),它的做用域範圍是有限制的,若是一個變量被聲明爲靜態的,那麼該變量能夠被模塊內全部的函數訪問,但不能被模塊外的其餘函數訪問。
3. 內部函數應該在當前源文件中說明和定義,對於可在當前源文件之外使用的函數,應該在一個頭文件中說明,使用這些函數的源文件要包含這個頭文件。
 
static全局變量和普通全局變量的區別:static全局變量只初始化一次,這是爲了防止它在其餘文件單元中引用。
 
static局部變量和普通局部變量的區別:static局部變量只初始化一次,下次的運算依據是上一次的結果值。
 
static函數與普通函數的區別在與做用域不同,static()函數只在一個源文件中有效,不能被其它源文件使用。
 
靜態數據成員的特色:
1. 對於非靜態數據成員,每一個類都有本身的複製品。而靜態數據成員被當作是類的成員。不管這個類的對象被定義了多少個, 靜態數據成員在程序中也只有一份複製品,由該類型的全部對象共享訪問。
2. 靜態數據成員存儲在全局數據區。定義時要分配空間,因此不能在類聲明中定義。因爲靜態數據成員屬於本類的全部對象共享,因此他不屬於特的類對象,在沒有產生類對象時,其做用域就可見,即在沒有產生類的實例時,程序員也可使用它。
3. 靜態數據成員也聽從public、protect、private訪問規則。
4. static成員變量的初始化在類外,此時不能再帶上static的關鍵字。private、protect的static成員雖然能夠在類外初始化,可是不能在類外被訪問。
 
靜態數據成員的優點:
1. 靜態數據成員沒有進入程序的全局名字空間,所以不存在與程序中其餘全局名字衝突的可能性。
2.能夠實現信息隱藏。靜態數據成員可使private成員,而全局變量不能。
#include<stdio.h>
#include <iostream>
#include "a.h"
using namespace std;
void fun(int i)
{
    static int value = i++;
    cout<<value<<endl;
}
int main()
{
    fun(0);
    fun(1);
    fun(2);
    return 0;
}

運行結果: 0
運行結果: 0
運行結果: 0程序員

相關文章
相關標籤/搜索