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

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

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

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

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

-auto-


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

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

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

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

-static -


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

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


#include 

int main(void)
{
    static a;

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

    return 0;
}
 

演示結(jié)果:

    the a is 0 

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


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

  #include 

   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 

   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ǔ)類方面和全局變量一樣

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

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

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

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

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

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

-register -


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

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

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

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


新聞標(biāo)題:c語言存儲(chǔ)類里的關(guān)鍵字有哪些
當(dāng)前網(wǎng)址:http://weahome.cn/article/jdcpsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部