C語言總結之 關鍵字

2021-09-09 04:12:43 字數 4000 閱讀 4663

我記得我開始學習c語言的時候,那時候還在讀高中,我們老師就把c語言的關鍵字,全部寫在黑板上,老師說我們下面的兩節課的內容就是(把它給記下來)

你還記得標準c有多少個關鍵字嗎?

第一:關鍵字描述

c99 關鍵字為32個

如果你還有不認識的,還應該好好複習複習了。

關鍵字                          意義

auto     宣告自動變數,預設時編譯器一般預設為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 計算物件所佔記憶體空間大小

注意:細心的童鞋,會發現我上述用了很多 "宣告" 兩個字,我要說的是 宣告和定義的區別,比搞混淆了

定義:就是編譯器建立乙個物件,分配一塊記憶體空間,並給它去了個名字,這個名字和記憶體空間對應。

宣告:就是告訴編譯器,這個名字已經比配過一塊記憶體空間了,用到的變數或者在其他的地方定義過。或者我先預定這個名字,其他地方不能再用它了。

第二:關鍵字強解

2.1 auto 關鍵字

也需,你還沒見過該關鍵字,其實他是隱身了的,但是你最常用。編譯器在預設的預設情況下,所有變數都是auto 的。

2.2 訪問最快的關鍵字 register

學嵌入式的都知道,cpu中暫存器訪問速度是最快的,其次就是快取---然後就是記憶體----然後就是其他外存,而該關鍵字,就是請求編譯器盡可能的將變數存在cpu 內部暫存器中而不是通過記憶體定址訪問以提高效率。

2.3 static 

該關鍵字的作用,在面試的時候經常問的。

當修飾變數:

靜態全域性變數,作用域僅限於變數被定義的檔案中,其他檔案即使用extern 宣告也沒法使用它

靜態區域性變數,在函式體裡面定義的,就只能在這個函式裡用了,同乙個文件中的其他函式也用不了

修飾函式:

函式前加static 使得函式成為靜態函式。但此處「static」的含義不是指儲存方式,而是指對函式的作用域僅侷限於本檔案(所以又稱內部函式)。

2.4 最冤枉的關鍵字----sizeof

他不是函式,而是關鍵字。

char *p;

sizeof(p);---->4  (32為系統)

2.5signed、unsigned 關鍵字

有符號,無符號關鍵字,沒什麼好說的。

如果定義 char test;   取值範圍  -128-127 

unsgiend char test;   取值範圍  0-255

2.6 bool值

面試題目這樣出的:

bool 變數與「零值」進行比較的if 語句怎麼寫?

float 變數與「零值」進行比較

指標變數與「零值」進行比較

答案:1 :if(btestflag); if(!btestflag);

原因:1 如果  if(btestflag == 0); if(btestflag == 1);

btestflag 是什麼?整型變數?如果要不是這個名字遵照了前面的命名規範,肯怕很容易讓人誤會成整型變數。所以這種寫法不好。

2 如果 if(btestflag == true); if(btestflag == flase);

flase 的值大家都知道,在編譯器裡被定義為0;但true 的值呢?都是1嗎?很不幸,不都是1。visual c++定義為1,而它的同胞兄弟visual basic 就把true 定義為-1.那很顯然,這種寫法也不好。

2:if((ftestval >= -epsinon) && (ftestval <= epsinon)); //epsinon 為定義好的精度。

如果:if(ftestval == 0.0); if(ftestval != 0.0);

float 和double 型別的資料都是有精度限制的,這樣直接拿來與0.0 比,能正確嗎?明顯不能,看例子:  的值四捨五入精確到小數點後 10位為:3.1415926536,你拿它減去0.00000000001 然後再四捨五入得到的結果是多少?你能說前後兩個值一樣嗎?epsinon 為定義好的精度,如果乙個數落在[0.0-epsinon,0.0+epsinon] 這個閉區間內,我們認為在某個精度內它的值與零值相等;否則不相等。擴充套件一下,把0.0 替換為你想比較的任何乙個浮點數,那我們就可以比較任意兩個浮點數的大小了,當然是在某個精度內。

3:if(null == p); if(null != p);

應該沒有什麼歧義吧

2.7 const 關鍵字(也是面試問的最多問題之一)

1 修飾的唯讀變數

const int max=100;

2 節省空間,避免不必要的記憶體分配,同時提高效率

#define m 3 //巨集常量

const int n=5; //此時並未將n 放入記憶體中

......

int i=n; //此時為n 分配記憶體,以後不再分配!

int i=m; //預編譯期間進行巨集替換,分配記憶體

int j=n; //沒有記憶體分配

int j=m; //再進行巨集替換,又一次分配記憶體!

3 修飾一般變數

int const i=2; 或const int i=2;

4 修飾陣列

int const a[5]=;或

const int a[5]=;

5 修飾指標

const int *p; // p 可變,p 指向的物件不可變

int const *p; // p 可變,p 指向的物件不可變

int *const p; // p 不可變,p 指向的物件可變

const int *const p; //指標p 和p 指向的物件都不可變

注意:記憶方法

先忽略型別名(編譯器解析的時候也是忽略型別名),我們看const 離哪個近。「近水樓台先得月」,離誰近就修飾誰。

2.8 最易變的關鍵字----volatile

volatile 是易變的、不穩定的意思。很多人根本就沒見過這個關鍵字,不知道它的存在。也有很多程式設計師知道它的存在,但從來沒用過它。我對它有種「楊家有女初長成,養在深閨人未識」 的感覺。

作用:(面試題目)

1) 並行裝置的硬體暫存器(如:狀態暫存器) 

2) 乙個中斷服務子程式中會訪問到的非自動變數(non-automatic variables) 

3) 多執行緒應用中被幾個任務共享的變數 

2.9 最會帶帽子的關鍵字----extern

宣告為外面變數

a.c 

int  testa=22;

b.c 

extern int testa;

testa=23;

今天就到這裡了,下節 說說結構體

C語言總結之 關鍵字

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

C語言關鍵字總結

每天進步一點點。若萌新總結有誤,望牛人不吝賜教。要學習c語言關鍵字,首先要知道什麼是c語言關鍵字。簡單的理解,c語言關鍵字就是由c標準規定的 具有特殊用途的單詞。那麼在c語言中都有哪些標準呢,這裡我簡單介紹兩個 看 c和指標 的小夥伴應該會經常看到這兩個 k r c 1978年由 ritchie 和...

C語言關鍵字總結

auto 區域性變數 自動儲存 char 單位元組整型資料 int基本整型資料 long長整型資料 void定義無型別資料 double定義雙精度浮點型資料 float定義單精度浮點型資料 short短整型資料 volatile該變數在程式中執行中可被隱含地改變 unsigned定義無符號資料 si...