想要學好C語言,那麼必須打好基礎,下面小編為大家帶來了C語言基礎小知識,歡迎大家閱讀!
C語言基礎小知識基本資料型別
void:宣告函式無返回值或無引數,宣告無型別指標,顯示丟棄運算結果。(C89標準新增)
char:字元型型別資料,屬於整型資料的一種。(K&R時期引入)
int:整型資料,表示範圍通常為編譯器指定的記憶體位元組長。(K&R時期引入)
float:單精度浮點型資料,屬於浮點資料的一種。(K&R時期引入)
double:雙精度浮點型資料,屬於浮點資料的一種。(K&R時期引入)
_Bool:布林型(C99標準新增)
_Complex:複數的基本型別(C99標準新增)
_Imaginary:虛數,與複數基本型別相似,沒有實部的純虛數(C99標準新增)
_Generic:提供過載的介面入口(C11標準新增)
型別修飾關鍵字
short:修飾int,短整型資料,可省略被修飾的int。(K&R時期引入)
long:修飾int,長整型資料,可省略被修飾的int。(K&R時期引入)
long long:修飾int,超長整型資料,可省略被修飾的int。(C99標準新增)
signed:修飾整型資料,有符號資料型別。(C89標準新增)
unsigned:修飾整型資料,無符號資料型別。(K&R時期引入)
restrict:用於限定和約束指標,並表明指標是訪問一個數據物件的唯一且初始的方式。(C99標準新增)
複雜型別關鍵字
struct:結構體宣告。(K&R時期引入)
union:聯合體宣告。(K&R時期引入)
enum:列舉宣告。(C89標準新增)
typedef:宣告類型別名。(K&R時期引入)
sizeof:得到特定型別或特定型別變數的大小。(K&R時期引入)
inline:行內函數用於取代巨集定義,會在任何呼叫它的地方展開。(C99標準新增)
儲存級別關鍵字
auto:指定為自動變數,由編譯器自動分配及釋放。通常在棧上分配。與static相反。當變數未指定時預設為auto。(K&R時期引入)
static:指定為靜態變數,分配在靜態變數區,修飾函式時,指定函式作用域為檔案內部。(K&R時期引入)
register:指定為暫存器變數,建議編譯器將變數儲存到暫存器中使用,也可以修飾函式形參,建議編譯器通過暫存器而不是堆疊傳遞引數。(K&R時期引入)
extern:指定對應變數為外部變數,即標示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。(K&R時期引入)
const:指定變數不可被當前執行緒改變(但有可能被系統或其他執行緒改變)。(C89標準新增)
volatile:指定變數的值有可能會被系統或其他執行緒改變,強制編譯器每次從記憶體中取得該變數的值,阻止編譯器把該變數優化成暫存器變數。(C89標準新增)
流程控制關鍵字
跳轉結構
return:用在函式體中,返回特定值(如果是void型別,則不返回函式值)。(K&R時期引入)
continue:結束當前迴圈,開始下一輪迴圈。(K&R時期引入)
break:跳出當前迴圈或switch結構。(K&R時期引入)
goto:無條件跳轉語句。(K&R時期引入)
分支結構
if:條件語句,後面不需要放分號。(K&R時期引入)
else:條件語句否定分支(與if連用)。(K&R時期引入)
switch:開關語句(多重分支語句)。(K&R時期引入)
case:開關語句中的分支標記,與switch連用。(K&R時期引入)
default:開關語句中的“其他”分支,可選。(K&R時期引入)
編譯
#define 預編譯巨集
#if 表示式 #else if 表示式 #else #endif 條件編譯
#ifdef 巨集 #else #endif 條件編譯
#ifndef 巨集 #else #endif 條件編譯與條件編譯
語法結構
順序結構
順序結構的程式設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。
例如:a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程式為:c = a; a = b; b = c;執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b =c;則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。順序結構可以獨立使用構成一個簡單的完整程式,常見的輸入、計算,輸出三步曲的程式就是順序結構,例如計算圓的面積,其程式的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。不過大多數情況下順序結構都是作為程式的一部分,與其它結構一起構成一個複雜的程式,例如分支結構中的複合語句、迴圈結構中的迴圈體等。
選擇結構
順序結構的程式雖然能解決計算、輸出等問題,但不能做判斷再選擇。對於要先做判斷再選擇的問題就要使用選擇結構。選擇結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。選擇結構的`程式設計方法的關鍵在於構造合適的分支條件和分析程式流程,根據不同的程式流程選擇適當的選擇語句。選擇結構適合於帶有邏輯或關係比較等條件判斷的計算,設計這類程式時往往都要先繪製其程式流程圖,然後根據程式流程寫出源程式,這樣做把程式設計分析與語言分開,使得問題簡單化,易於理解。程式流程圖是根據解題分析所繪製的程式執行流程圖。[23]
迴圈結構
迴圈結構可以減少源程式重複書寫的工作量,用來描述重複執行某段演算法的問題,這是程式設計中最能發揮計算機特長的程式結構,C語言中提供四種迴圈,即goto迴圈、while迴圈、do while迴圈和for迴圈。四種迴圈可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto迴圈,因為強制改變程式的順序經常會給程式的執行帶來不可預料的錯誤。
特別要注意在迴圈體內應包含趨於結束的語句(即迴圈變數值的改變),否則就可能成了一個死迴圈,這是初學者的一個常見錯誤。
三個迴圈的異同點:用while和do…while迴圈時,迴圈變數的初始化的操作應在迴圈體之前,而for迴圈一般在語句1中進行的;while迴圈和for迴圈都是先判斷表示式,後執行迴圈體,而do…while迴圈是先執行迴圈體後判斷表示式,也就是說do…while的迴圈體最少被執行一次,而while迴圈和for就可能一次都不執行。另外還要注意的是這三種迴圈都可以用break語句跳出迴圈,用continue語句結束本次迴圈,而goto語句與if構成的迴圈,是不能用break和 continue語句進行控制的。
順序結構、分支結構和迴圈結構並不彼此孤立的,在迴圈中可以有分支、順序結構,分支中也可以有迴圈、順序結構,其實不管哪種結構,均可廣義的把它們看成一個語句。在實際程式設計過程中常將這三種結構相互結合以實現各種演算法,設計出相應程式,但是要程式設計的問題較大,編寫出的程式就往往很長、結構重複多,造成可讀性差,難以理解,解決這個問題的方法是將C程式設計成模組化結構