C語言篇之儲存類關鍵字

2021-08-21 20:37:53 字數 1333 閱讀 3695

在此之前需要先明白c語言中的變數和常量都儲存在什麼地方?

.data段和.bss段:區域性變數是儲存在棧上的,全域性變數儲存在.data段和.bss段,其中初始化顯示為0的和未賦初值的全域性變數儲存在.bss段,初始化不為0的儲存在.data段,靜態區域性變數和全域性變數的儲存類是一樣的,其中初始化顯示為0的和未賦初值的靜態區域性變數儲存在.bss段,初始化不為0的儲存在.data段。

.text段即**段(在linux中又叫文字段):程式**,const修飾的常量也可能儲存在.text段(與編譯環境有關)。

heap:根據需求判斷要不要使用堆,用的時候自己申請,用完之後自己釋放。

stack:區域性變數儲存在棧上,函式呼叫傳參的過程也會用到棧。

1. auto

auto 關鍵字在c語言中只有乙個作用就是修飾區域性變數,表示這個變數是自動區域性變數,分配在棧上,平時定義的區域性變數就是自動區域性變數,只是省略了auto。

2. static

static關鍵字在c語言中有兩種用法

第一種就是修飾區域性變數:static修飾的區域性變數只是改變了儲存類,其儲存方式和全域性變數一樣(其中初始化顯示為0的和未賦初值的靜態區域性變數儲存在.bss段,初始化不為0的儲存在.data段),鏈結屬性為無鏈結,作用域和普通區域性變數一樣。

第二種就是修飾全域性變數和函式:static修飾全域性變數和函式只是改變了他們的鏈結屬性由外鏈結變為內鏈結(.c檔案內),全域性變數和函式預設的鏈結屬性為外鏈結(可以跨檔案進行鏈結)。

3. register

這個關鍵字不常用,register修飾的變數,編譯器會盡量將他們分配在暫存器中,(平時分配的一般變數都是在記憶體中,分配在暫存器中一樣的用,但是讀寫效率會提高很多)。所以register修飾的變數用在那種變數被反覆高頻率的使用,通過改善這個變數的訪問效率可以極大的提公升程式的執行效率。

4. extern

extern用來宣告全域性變數,宣告的目的主要是在a.c中定義全域性變數而在b.c中使用該變數。

5. volatile

volatile 可變的 易變的 c語言中volatile用來修飾乙個變數,表明這個變數可以被編譯器之外的東西改變(編譯器不可預知的東西,比如硬體自動更改了這個變數的值,一般這個變數是乙個暫存器的值,比如在多執行緒中在別的執行緒更改了這個變數的值),如果不該加時加了會降低效率。

6. restrict

c99編譯器中支援,很多延續c89的編譯器是不支援restrict關鍵字的,gcc支援。

restrict只用來修飾指標,不能修飾普通變數,用restrict修飾的指標指向的區域別的指標不能來修改。

7. typedef

typedef屬於儲存類關鍵字,但是實際上和儲存類沒關係。

C語言篇 32個關鍵字

1 signed 作用 宣告有符號型別變數或函式 2 unsigned 作用 宣告無符號型別變數或函式 3 char 作用 宣告字元型變數或函式 4 int 作用 宣告整型變數或函式 5 float 作用 宣告浮點型變數或函式 6 double 作用 宣告雙精度變數或函式 7 short 作用 宣告...

C語言篇(2)C語言關鍵字

這些關鍵字不能作為常量名 變數名或者函式名等識別符號 關鍵字含義 int申明整形變數或函式 short 修飾int,申明短整型變數或函式 long 修飾int,申明長整型變數或函式 longlong 修飾int,超長整形資料 signed 修飾整形資料,有符號資料型別 unsigned 修飾整形資料...

C語言總結之 關鍵字

我記得我開始學習c語言的時候,那時候還在讀高中,我們老師就把c語言的關鍵字,全部寫在黑板上,老師說我們下面的兩節課的內容就是 把它給記下來 你還記得標準c有多少個關鍵字嗎?第一 關鍵字描述 c99 關鍵字為32個 如果你還有不認識的,還應該好好複習複習了。關鍵字 意義 auto 宣告自動變數,預設時...