真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C之變量屬性(五)-創(chuàng)新互聯(lián)

    我們知道以在 C 語言中的變量有自己的屬性,只要在定義變量的時(shí)候加上“屬性”關(guān)鍵字即可。“屬性”關(guān)鍵字指明變量的特有意義。

成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計(jì)制作的公司,為廣大用戶提供了成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司,成都網(wǎng)站設(shè)計(jì),一元廣告,成都做網(wǎng)站選成都創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價(jià)比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。

        語法:property type var_name;比如:auto int i; register int j;extern float k;static double m;

       auto 關(guān)鍵字:它是 C 語言中局部變量的默認(rèn)屬性;表明將被修飾的變量存儲(chǔ)于棧上;編譯器默認(rèn)所有的局部變量都是 auto 的。

        register 關(guān)鍵字:指明將局部變量存儲(chǔ)于寄存器中;只是請求寄存器變量,但不一定請求成功;register 變量的必須是 CPU 寄存器可以接受的值;不能用 &  運(yùn)算符獲取 register 變量的地址。

        static 關(guān)鍵字:指明變量的“靜態(tài)”屬性,static 修飾的局部變量存儲(chǔ)在程序靜態(tài)區(qū);它同時(shí)具有“作用域限定符”的意義,static 修飾的全局變量作用域只是聲明的文件中,修飾的函數(shù)作用域只是在聲明的文件中。

        下來我們做個(gè)實(shí)驗(yàn)分析下,代碼如下:

#include 

int f1()
{
    int r = 0;
    
    r++;
    
    return r;
}

int f2()
{
    static int r = 0;
    
    r++;
    
    return r;
}


int main()
{
    auto int i = 0;       // 顯示聲明 auto 屬性,i 為棧變量
    static int k = 0;     // 局部變量 k 的存儲(chǔ)區(qū)位于靜態(tài)區(qū),作用域位于 main 中
    register int j = 0;   // 向編譯器申請將 j 存儲(chǔ)于寄存器中

    printf("%p\n", &i);
    printf("%p\n", &k);
    printf("%p\n", &j);   // error
    
    for(i=0; i<5; i++)
    {
        printf("%d\n", f1());
    }
    
    printf("\n");
    
    for(i=0; i<5; i++)
    {
        printf("%d\n", f2());
    }
    
    return 0;
}

         我們可以看出第 30 行代碼會(huì)出錯(cuò),因?yàn)椴荒苡?&  運(yùn)算符獲取 register 變量的地址。編譯如下:

C之變量屬性(五)

        我們注釋掉那行代碼之后,再次編譯,得到結(jié)果如下:

C之變量屬性(五)

        我們發(fā)現(xiàn)雖然 i 和 k 是挨著定義的,但是因?yàn)閷傩圆煌?,所以他倆的地址也差的好大。再接著看 f1() 和 f2() 基本上都差不多,但是打印結(jié)果卻差別很大呢?仔細(xì)看看在 f2() 中,我們加了 static 關(guān)鍵字。也就是說 f1() 中的 r 是局部變量,在每次執(zhí)行循環(huán)的時(shí)候都要進(jìn)行初始化為0,所以打印五次結(jié)果都為 0;但 f2() 不同,r 前面加有 static,所以其相當(dāng)于全局變量,在循環(huán)時(shí)只進(jìn)行一次的初始化,后面的循環(huán)便依次加一了。

        接下來我們來介紹 extern 關(guān)鍵字:它是用于聲明“外部”定義的變量和函數(shù),extern 變量在文件的其他地方分配空間,extern 函數(shù)在其他地方定義;它用于“告訴”編譯器用 C 的方式進(jìn)行編譯,C++ 編譯器和一些變種 C 編譯器默認(rèn)會(huì)按“自己”的方式編譯函數(shù)和變量,通過 extern C 關(guān)鍵字可以命令編譯器“以標(biāo)準(zhǔn) C 方式進(jìn)行編譯”。

        下來我們就來驗(yàn)證下,代碼如下:

#include 

extern int getI();

int main()
{
    printf("%d\n", getI());
       
    return 0;
}

        g.c 代碼如下:

static int g_i;

int getI()
{
    return g_i;
}

        我們編譯得到結(jié)果如下:

C之變量屬性(五)

        雖然我們沒在 test.c 文件中定義 getI(),但是我們在 main() 之前進(jìn)行 extern 聲明,編譯器在編譯到這時(shí)會(huì)先向下編譯然后再 g.c 文件中進(jìn)行尋找。最后成功執(zhí)行 getI(),getI() 返回的是一個(gè) static 修飾的全局變量,默認(rèn)為 0。所以最后結(jié)果為 0。

        那么我們本次學(xué)習(xí)了變量的屬性,auto 變量存儲(chǔ)在程序的棧中,默認(rèn)屬性;static 變量存儲(chǔ)在程序靜態(tài)區(qū)中;register 變量請求存儲(chǔ)于 CPU 寄存器中;extern 變量在文件的其他地方分配空間,extern 能夠指示其他編譯器按照標(biāo)準(zhǔn) C 方式編譯程序。

        歡迎大家一起來學(xué)習(xí) C 語言,可以加我QQ:243343083。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


文章名稱:C之變量屬性(五)-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://weahome.cn/article/djdpog.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部