c語(yǔ)言存儲(chǔ)類(lèi)里的關(guān)鍵字有哪些

本篇內(nèi)容主要講解“c語(yǔ)言存儲(chǔ)類(lèi)里的關(guān)鍵字有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“c語(yǔ)言存儲(chǔ)類(lèi)里的關(guān)鍵字有哪些”吧!

創(chuàng)新互聯(lián)2013年至今,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元遷西做網(wǎng)站,已為上家服務(wù),為遷西各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18982081108

-auto-


(1)auto關(guān)鍵字在C語(yǔ)言中只有一個(gè)作用,那就是修飾局部變量。

(2)auto修飾局部變量,表示這個(gè)局部變量是自動(dòng)局部變量,自動(dòng)局部變量分配在棧上。(既然

在棧上,說(shuō)明它如果不初始化那么值就是隨機(jī)的······)。

(3)平時(shí)定義局部變量時(shí)就是定義的auto的,只是省略了auto關(guān)鍵字而已??梢?jiàn),auto的局部變量其實(shí)就是默認(rèn)定義的普通的局部變量。

-static -


(1)static關(guān)鍵字在C語(yǔ)言中有2種用法,而且這兩種用法彼此沒(méi)有任何關(guān)聯(lián)、完全是獨(dú)立的。其實(shí)當(dāng)年本應(yīng)該多發(fā)明一個(gè)關(guān)鍵字,但是C語(yǔ)言的作者覺(jué)得關(guān)鍵字太多不好,于是給static增加了一種用法,導(dǎo)致static一個(gè)關(guān)鍵字竟然有兩種截然不同的含義。

(2)static的第一種用法是:用來(lái)修飾局部變量,形成靜態(tài)局部變量。要搞清楚靜態(tài)局部變量和非靜態(tài)局部變量的區(qū)別。本質(zhì)區(qū)別是存儲(chǔ)類(lèi)不同(存儲(chǔ)類(lèi)不同就衍生出很多不同):非靜態(tài)局部變量分配在棧上,而靜態(tài)局部變量分配在數(shù)據(jù)段/bss段上, 在數(shù)據(jù)段的話(huà),它是初始化好的,在bss段的話(huà),一般我們沒(méi)有初始化的,一般默認(rèn)0,這個(gè)和全局變量不初始化一樣。


#include <stdio.h>

int main(void)
{
    static a;

    printf("the a is %d\n",a);

    return 0;
}
 

演示結(jié)果:

    the a is 0 

(3)static的第二種用法是:用來(lái)修飾全局變量,形成靜態(tài)全局變量。要搞清楚靜態(tài)全局變量和非靜態(tài)全局變量的區(qū)別。區(qū)別是在鏈接屬性上不同,等下面有介紹的。這里的話(huà)我舉幾個(gè)例子來(lái)說(shuō)明:


------沒(méi)用static關(guān)鍵字修飾:

  #include <stdio.h>

   void test()
  {
       int num = 0;
       num++;
       printf("%d ", num);
  }
   int main()
   {
       int i = 0;
      for (i = 0; i < 10; i++)
      {
        test();
      }
       return 0;
   }
    

演示結(jié)果:

1 1 1 1 1 1 1 1 1 1 

-----加了static修飾:

  #include <stdio.h>

   void test()
  {
      static int num = 0;
       num++;
       printf("%d ", num);
  }
   int main()
   {
       int i = 0;
      for (i = 0; i < 10; i++)
      {
        test();
      }
       return 0;
   }
 

演示結(jié)果:


    1 2 3 4 5 6 7 8 9 10 

(4)小結(jié):

  • 靜態(tài)局部變量在存儲(chǔ)類(lèi)方面和全局變量一樣。

  • 靜態(tài)局部變量在生命周期方面和全局變量一樣。

  • 靜態(tài)局部變量和全局變量的區(qū)別是:作用域、連接屬性。靜態(tài)局部變量作用域是代碼塊作用域(和普通局部變量是一樣的)、鏈接屬性是無(wú)連接;全局變量作用域是文件作用域(和函數(shù)是一樣的)、鏈接屬性方面是外連接。這里先簡(jiǎn)單說(shuō)一下三種鏈接屬性:

  • (1)外鏈接的意思就是外部鏈接屬性,也就是說(shuō)外鏈接可以在整個(gè)程序范圍內(nèi)(言下之意就是可以跨文件)進(jìn)行鏈接,譬如普通的函數(shù)和全局變量屬于外鏈接。

  • (2)內(nèi)鏈接的意思就是(c文件內(nèi)部)內(nèi)部鏈接屬性,也就是說(shuō)這家伙可以在當(dāng)前c文件內(nèi)部范圍內(nèi)進(jìn)行鏈接(言下之意就是不能在當(dāng)前c文件外面的其他c文件中進(jìn)行訪(fǎng)問(wèn)、鏈接)。static修飾的函數(shù)/全局變量屬于內(nèi)鏈接。

  • (3)無(wú)連接的意思就是這個(gè)符號(hào)本身不參與鏈接,它跟鏈接沒(méi)關(guān)系。所有的局部變量(auto的、static的)都是無(wú)連接的。

(5)靜態(tài)函數(shù)(就是使用這個(gè)static關(guān)鍵字修飾),想必搞stm32的讀者,都有接觸到(這里的話(huà),我就不例子了);當(dāng)你的程序中有很多源文件的時(shí)候(這在寫(xiě)stm32的時(shí)候經(jīng)常遇到,而且經(jīng)常要養(yǎng)成多文件不被重復(fù)包含的寫(xiě)法代碼習(xí)慣),一般在stm32里面會(huì)使用這個(gè)static關(guān)鍵字來(lái)修飾函數(shù),所以這個(gè)函數(shù)就只能在這個(gè)文件內(nèi)使用了,不能在外部再使用這個(gè)函數(shù)了(這個(gè)函數(shù)的作用域只能在當(dāng)前文件內(nèi)),其實(shí)和上面講全局變量和靜態(tài)全局變量的區(qū)別類(lèi)似。

-register -


(1)register關(guān)鍵字不常用,也只有一個(gè)作用,那就是:register修飾的變量。編譯器會(huì)盡量將它分配在寄存器中。(平時(shí)分配的一般的變量都是在內(nèi)存中的,其實(shí)讀取內(nèi)存中的數(shù)據(jù)過(guò)程是這樣的:cpu+寄存器+cache+內(nèi)存)。分配在寄存器中一樣的用,但是讀寫(xiě)效率會(huì)高很多。所以register修飾的變量用在那種變量被反復(fù)高頻率的使用,通過(guò)改善這個(gè)變量的訪(fǎng)問(wèn)效率可以極大的提升程序運(yùn)行效率時(shí)。所以register是一種極致提升程序運(yùn)行效率的手段。

(2)平時(shí)寫(xiě)代碼要被定義成register這種情況很少,一般慎用。

(3)register編譯器只能承諾盡量將register修飾的變量放在寄存器中,但是不保證一定放在寄存器中。主要原因是因?yàn)榧拇嫫鲾?shù)量有限,不一定有空用。

到此,相信大家對(duì)“c語(yǔ)言存儲(chǔ)類(lèi)里的關(guān)鍵字有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

本文標(biāo)題:c語(yǔ)言存儲(chǔ)類(lèi)里的關(guān)鍵字有哪些
瀏覽路徑:http://bm7419.com/article36/jdcpsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、響應(yīng)式網(wǎng)站關(guān)鍵詞優(yōu)化、域名注冊(cè)移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作