1. 程式人生 > >5、C語言深度學習筆記--C語言中的基本元素

5、C語言深度學習筆記--C語言中的基本元素

一、C語言中的字符集

1、⼀般來說,程式設計語⾔的字符集都可分為兩組:⼀組叫源字符集,另⼀組叫執⾏字符集。所謂“源字符集”是指在寫C原始碼時⽤的字符集,也就是呈現在C源⽂件中的字符集。⽽“執⾏字符集”是指編譯構建完源⽂件後的⽬標⼆進位制⽂件中所表⽰的字符集,它將⽤於運⾏在當前的執⾏環境中。⽐如,我們在控制檯或者GUI窗⼜檢視上所看到的⽂字資訊就屬於執⾏字符集。

二、C語⾔中的token

1、在程式設計語⾔中經常會涉及“token”這個詞,token這⾥不是指⽹絡通訊中所謂的“令牌”,⽽是⽤於詞法解析的,通過指定⼀個詞位(詞的單位)的類別來結構化表⽰該詞位。如以下程式碼:

//
int a = 3 << 2;
//
這⾥就有7個token,分別是:int、a、=、3、<<、2以及最後的分號;。這⼀⾏程式碼中就已經列出了C語⾔中的常⽤⼏種token,分別是關鍵字(int)、識別符號(a)、字⾯量(3和2)、操作符(=和<<)、其他標點符號(;)。

三、C語言中的“物件”--變數與常量

1、C11標準將“物件”定義為執⾏環境中的資料儲存區域,物件中的內容⽤於表達它的值。當引⽤了某⼀物件時,該物件就可稱為具有⼀個特定型別。⾔下之意,C語⾔標準中的“物件”是指資料實體,⽽不是⼀個函式。此外,它具有⼀個特定的儲存區域,⽆論是在暫存器中還是在儲存器中。另外,它具有⼀個特定的型別。

2、這⾥的“物件”與⾯向物件程式設計語⾔所涉及的物件概念有些差別,不過從範圍上來講,這⾥的“物件”⽐⾯向物件中的物件範圍更⼴。從總體上將物件進⾏劃分可分為兩⼤類——變數和常量。

3、在C語⾔實現中,常量可以被寫⼊ROM,尤其對於嵌⼊式裝置⽽⾔,更有可能如此。這樣,⼀旦對某個常量物件進⾏修改,那麼系統會直接發出異常。⽽在通⽤桌⾯作業系統中,常量也被分配在RAM中,所以我們仍然可以通過型別轉換或是其他奇技淫巧對常量物件進⾏修改,不過後果是⽆法預估的。

四、C語⾔中的“副作⽤”

1、在很多程式設計語⾔中都會提到“副作⽤”(side effects)這個概念。在C11標準中對副作⽤是這麼描述的:對⼀個易變物件的訪問、對⼀個物件的修改、對⼀個⽂件的修改,或調⽤⼀個函式,所有這些操作都具有副作⽤。副作⽤對執⾏環境中的狀態做了改變。對⼀個表示式的計算通常包含了對值的計算以及對副作⽤的初始化。對⼀個左值表示式的值計算包含了判定該表示式所表⽰物件的標識。

2、通常來講,所謂副作⽤就是在C原始碼中的某⼀條表示式在⽬標程式中執⾏時,對當前程式的執⾏狀態產⽣了或潛在產⽣改變,那麼我們稱該表示式產⽣了副作⽤。

五、C語⾔標準庫中的printf函式

1、函式原型

//
int printf(const char * restrict format, ...);
//

2、此函式第⼀個引數format是⼀個字串格式符,後⾯的省略號表⽰不定個數的引數,這些引數的資料型別需要分別與format所指向的字串中的格式匹配。函式最後返回的是⼀個int型別整數,表⽰被傳遞到控制檯的字元的個數。如果輸出或者字串編碼發⽣錯誤,那麼該函式將返回⼀個負值。

3、常⽤的format字串中的格式符如下:

(1)%c:對應引數是⼀個int型別,但實際運⾏時會將該int型別物件轉換為unsigned char型別。
(2)%d:對應引數是⼀個int型別。
(3)%f:對應引數是⼀個double型別。
(4)%ld:對應引數是⼀個long int型別。
(5)%s:對應引數是⼀個const char*型別,表⽰輸出⼀個字串。
(6)%u:對應引數是⼀個unsigned int型別。
(7)%zu:對應引數是⼀個size_t型別。
(8)%td:對應引數是⼀個ptrdiff_t型別。
(9)%x(或%X):對應引數是⼀個int型別,不過會以⼗六進位制形式輸出,其中⼤於9的數字根據字母x⼤⼩寫進⾏轉換,如果是%x,則⼤於9的數⽤a~f表⽰;如果是%X,則⽤A~F表⽰。
(10)%%:輸出⼀個%符號。

致謝

1、《C語言程式設計魔法書》作者 陳軼