C語言的32關鍵字

表(1.1)C語言標準定義的32個關鍵字

關鍵字 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 意 義

?auto ? ? ? ? ?聲明自動變量,缺省時編譯器一般默認為

int ? ? ? ? ? ? ?聲明整型變量

double? ? ? 聲明雙精度變量

long? ? ? ? ? 聲明長整型變量

char? ? ? ? ? 聲明字符型變量

float ? ? ? ? ?聲明浮點型變量?

short ? ? ? ?聲明短整型變量

signed ? ? ?聲明有符號類型變量

unsigned ? 聲明無符號類型變量

struct? ? ? ? 聲明結構體變量

union ? ? ? 聲明聯合數據類型

enum ? ? ? 聲明枚舉類型

static? ? ? 聲明靜態變量

switch ? ? 用于開關語句

case ? ? ? ?開關語句分支

default ? ?開關語句中的“其他”分支

break ? ? ? 跳出當前循環 ?

register? ? 聲明寄存器變量

const ? ? ? ? 聲明只讀變量

volatile ? ? ?說明變量在程序執行中可被隱含地改變

typedef ? ? ?用以給數據類型取別名(當然還有其他作用)

extern ? ? ? 聲明變量是在其他文件正聲明(也可以看做是引用變量)

return ? ? ? 子程序返回語句(可以帶參數,也可不帶參數)

void ? ? ? ? ? 聲明函數無返回值或無參數,聲明空類型指針continue結束當前循環,開始下一輪循環

do ? ? ? ? ? 循環語句的循環體

while ? ? ? 循環語句的循環條件

if ? ? ? ? ? ? 條件語句

else ? ? ? ? 條件語句否定分支(與if連用)

for ? ? ? ? ?一種循環語句(可意會不可言傳)

goto ? ? ? ?無條件跳轉語句

sizeof ? ? ?計算對象所占內存空間大小

1.1,最寬恒大量的關鍵字----autoauto:它很寬恒大量的,你就當它不存在吧。編譯器在默認的缺省情況下,所有變量

都是auto的。

1.2,最快的關鍵字---- register

register:這個關鍵字請求編譯器盡可能的將變量存在CPU內部寄存器中而不是通過內

存尋址訪問以提高效率。注意是盡可能,不是絕對。你想想,一個CPU的寄存器也就那么

幾個或幾十個,你要是定義了很多很多register變量,它累死也可能不能全部把這些變量放

入寄存器吧,輪也可能輪不到你。

1.2.1,皇帝身邊的小太監----寄存器

不知道什么是寄存器?那見過太監沒有?沒有?其實我也沒有。沒見過不要緊,見過就

麻煩大了。^_^,大家都看過古裝戲,那些皇帝們要閱讀奏章的時候,大臣總是先將奏章交

給皇帝旁邊的小太監,小太監呢再交給皇帝同志處理。這個小太監只是個中轉站,并無別

的功能。

好,那我們再聯想到我們的CPU。CPU不就是我們的皇帝同志么?大臣就相當于我們

的內存,數據從他這拿出來。那小太監就是我們的寄存器了(這里先不考慮CPU的高速緩

存區)。數據從內存里拿出來先放到寄存器,然后CPU再從寄存器里讀取數據來處理,處理

完后同樣把數據通過寄存器存放到內存里,CPU不直接和內存打交道。這里要說明的一點

是:小太監是主動的從大臣手里接過奏章,然后主動的交給皇帝同志,但寄存器沒這么自覺,

它從不主動干什么事。一個皇帝可能有好些小太監,那么一個CPU也可以有很多寄存器,

不同型號的CPU擁有寄存器的數量不一樣。

為啥要這么麻煩啊?速度!就是因為速度。寄存器其實就是一塊一塊小的存儲空間,只

不過其存取速度要比內存快得多。進水樓臺先得月嘛,它離CPU很近,CPU一伸手就拿到

數據了,比在那么大的一塊內存里去尋找某個地址上的數據是不是快多了?那有人問既然

它速度那么快,那我們的內存硬盤都改成寄存器得了唄。我要說的是:你真有錢!

1.2.2,使用 register 修飾符的注意點

雖然寄存器的速度非???但是使用register修飾符也有些限制的:register變量必須是

能被CPU寄存器所接受的類型。意味著register變量必須是一個單個的值,并且其長度應小

于或等于整型的長度。 而且register變量可能不存放在內存中,所以不能用取址運算符“&”

來獲取register變量的地址。

1.3,最名不符實的關鍵字----static

不要誤以為關鍵字static很安靜,其實它一點也不安靜。這個關鍵字在C語言里主要有

兩個作用,C++對它進行了擴展。1.3.1,修飾變量

第一個作用:修飾變量。變量又分為局部和全局變量,但它們都存在內存的靜態區。

靜態全局變量,作用域僅限于變量被定義的文件中,其他文件即使用extern聲明也沒法

使用他。準確地說作用域是從定義之處開始,到文件結尾處結束,在定義之處前面的那些

代碼行也不能使用它。想要使用就得在前面再加extern ***。惡心吧?要想不惡心,很簡單,

直接在文件頂端定義不就得了。

靜態局部變量,在函數體里面定義的,就只能在這個函數里用了,同一個文檔中的其他

函數也用不了。由于被static修飾的變量總是存在內存的靜態區,所以即使這個函數運行結

束,這個靜態變量的值還是不會被銷毀,函數下次使用時仍然能用到這個值。

static int j;

void fun1(void){

static int i = 0;

i ++;

}

void fun2(void){

j = 0;

j++;

}

int main()

{

for(k=0; k<10; k++)

{

fun1();

fun2();

}

return 0;

}

i和j的值分別是什么,為什么?

1.3.2,修飾函數

第二個作用:修飾函數。函數前加static使得函數成為靜態函數。但此處“static”的含義

不是指存儲方式,而是指對函數的作用域僅局限于本文件(所以又稱內部函數)。使用內部函

數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件

中的函數同名。

關鍵字static有著不尋常的歷史。起初,在C中引入關鍵字static是為了表示退出一個

塊后仍然存在的局部變量。隨后,static在C中有了第二種含義:用來表示不能被其它文件

訪問的全局變量和函數。為了避免引入新的關鍵字,所以仍使用static關鍵字來表示這第二

種含義。

當然,C++里對static賦予了第三個作用,這里先不討論,有興趣的可以找相關資料研

究。

1.4,基本數據類型----short、int、long、char、float、double

C語言包含的數據類型如下圖所示:數值類型

基本類型

構造類型

指針類型

空類型void

短整型short

整型int

長整型long

單精度型float

數組

結構體struct

浮點型

雙精度型double

字符類型char

共用體union

枚舉類型enum

C

1.4.1,數據類型與“模子”

short、int、long、char、float、double這六個關鍵字代表C語言里的六種基本數據類型。

怎么去理解它們呢?舉個例子:見過藕煤球的那個東西吧?(沒見過?煤球總見過吧)。那個

東西叫藕煤器,拿著它在和好的煤堆里這么一咔,一個煤球出來了。半徑12cm,12個孔。

不同型號的藕煤器咔出來的煤球大小不一樣,孔數也不一樣。這個藕煤器其實就是個模子。

現在我們聯想一下,short、int、long、char、float、double這六個東東是不是很像不同

類型的藕煤器啊?拿著它們在內存上咔咔咔,不同大小的內存就分配好了,當然別忘了給

它們取個好聽的名字。在32位的系統上short咔出來的內存大小是2個byte;int咔出來的

內存大小是4個byte;long咔出來的內存大小是4個byte;float咔出來的內存大小是4個byte;double咔出來的內存大小是8個byte;char咔出來的內存大小是1個byte。(注意這里指一

般情況,可能不同的平臺還會有所不同,具體平臺可以用sizeof關鍵字測試一下)

很簡單吧?咔咔咔很爽吧?是很簡單,也確實很爽,但問題就是你咔出來這么多內存塊,

你總不能給他取名字叫做x1,x2,x3,x4,x5...或者長江1號,長江2號...吧。它們長得這么像(不

是你家的老大,老二,老三...),過一陣子你就會忘了到底哪個名字和哪個內存塊匹配了(到

底誰嫁給誰了啊?^_^)。所以呢,給他們取一個好的名字絕對重要。下面我們就來研究研究

取什么樣的名字好。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容

  • 注:這是第三遍讀《C語言深度解剖》,想想好像自從大學開始就沒讀完過幾本書,其中譚浩強的那本《C語言程序設計(第四版...
    HavenXie閱讀 1,753評論 1 6
  • 第一類:數據類型關鍵字 1.基本數據類型(5個) void 聲明函數無返回值或無參數,聲明無類型指針,顯式丟棄運算...
    lancely閱讀 1,029評論 0 3
  • 天色青了,烏云來了 荷偏著頭看天空 靜看著雨什么時候落 雨落下來頃刻覆蓋大地 荷開心的接著從天而降的小玩意 應接不...
    行思坐憶閱讀 193評論 1 1
  • 最近在學習混合開發,畢竟大勢所趨 ,在這里記錄一下自己的學習過程吧。 Cordova提供了一組設備相關的API,通...
    星落塵閱讀 447評論 0 0
  • 膝關節真的要置換嗎? 本市唐市鎮71歲老阿姨平某,高血壓、頸椎病、腰間盤突出、骨質增生、坐骨神經痛,更要命的是雙膝...
    聽雨XJZ閱讀 263評論 0 1