菜鳥問與答(變量和數(shù)據(jù)存儲)

字號:

1、變量有哪些存儲類型?
    變量的存儲類型由“存儲類型指明符”來說明。存儲類型指明符可以是下列類鍵字之一:
    auto
    register
    extern
    static
    下面是詳細的解釋:
    auto 存儲類指明符--用于說明具有局部作用域的變量,它表示變量具有局部(自動)生成期,但由于它是所有局部作用域變量說明的缺省存儲類指明符,所以使用得很少。要注意的是,所有在函數(shù)內(nèi)部定義的變量都是局部變量,函數(shù)內(nèi)部定義的變量其作用域只在函數(shù)內(nèi)部。它的生存期為該函數(shù)運行期間,一旦離開這個函數(shù)或這個函數(shù)終止,局部變量也隨之消失。
    register 存儲類指明符--當聲明了這個指明符后,編譯程序將盡可能地為該變量分配CPU內(nèi)部的寄存器作為變量的存儲單元,以加快運行速度。注意,寄存器與存儲器是不同的。寄存器一般在CPU內(nèi)部,而存儲器一般指外部的(比如內(nèi)存條),CPU內(nèi)部的寄存器其運算速度是很高的。當寄存器已分配完畢,就自動地分配一個外部的內(nèi)存。它的作用等價于auto,也只能用于局部變量和函數(shù)的參量說明。 來源:www.examda.com   
    static 存儲類指明符--表示變量具有靜態(tài)生成期。static變量的的特點是它離開了其作用域后,其值不會消失。
    當回到該作用域之后又可以繼續(xù)使用這個static變量的值。
    例:利用static變量統(tǒng)計調(diào)用函數(shù)的次數(shù)
    int two(); /*函數(shù)原型說明*/
    void main()
    {
    int a=0;
    a=two(); /*a的值等于1*/
    a=two() /*a的值等于2*/
    a=two(); /*a的值等于3*/
    }
    int two()
    {
    static int b=0;    /*定義了一個局部的static變量*/
    b++;
    return b;
    }
    如果不是一個static變量就不會有這個效果了
    int two(); /*函數(shù)原型說明*/
    void main()
    {
    int a=0;
    a=two(); /*a的值等于1*/
    a=two() /*a的值等于1*/
    a=two(); /*a的值等于1*/
    }
    int two()
    {
    int b=0;    
    b++;
    return b;
    }
    變量a的值總是1,原因是在函數(shù)two()中,變量b不是一個static變量,其值隨著離開two函數(shù)就消失了,當回到two函數(shù)時又被重新賦值0。