C C 《Linux C程式設計》總結

2021-05-24 13:20:29 字數 3231 閱讀 1302

《linux c程式設計》,這本書讀了乙個月,主要是衝著linux去的,講得很細,但是,並不是我想要了解到的層面。

第一部分講解c語言入門,重點學習了一下,和c++ primer相比,linux c程式設計一書還有較大的提公升空間。第二部分講解c語言本質,設計計算機硬體的知識比較多,這裡也沒深入研究。大體整理了乙個第一部分各個章節的知識點,備忘如下:

2011/02/21

讀書《linux c程式設計》ch3。(2)

此章主要講解「簡單函式」,有幾個較重要的知識點,備忘如下:

①.c標準主要由兩部分組成,一部分描述c的語法,另一部分描述c標準庫。要在乙個平台上支援c語言,不僅要實現c編譯器,還要實現c標準庫,這樣的實現才能符合c標準。不符合c標準的實現也是存在的,例如很多微控制器的c語言開發工具中就只有c編譯器而沒有完整的c標準庫。

在linux平台上使用最廣泛的c函式庫是glibc,其中包括c標準庫的實現,也包括c標準之外的各種系統函式。(page26)

②.c標準允許兩種main函式的書寫方式:

int main(int argc,char *atgv)

int main(void)

除了這兩種形式之外,定義main函式的其他寫法都是錯誤的或不可移植的。另外,在定義或者宣告函式時,也要注意,若函式無形參,需要填寫void。(page27)

③.man page是linux開發最常用的參考手冊,由很多頁面組成,每個頁面描述乙個主題,這些頁面被組織成若干個section。(page34)

④.區域性變數可以用型別相符的任意表示式來初始化,而全域性變數只能用常量表示式(constant expression)初始化。例如,全域性變數pi這樣初始化是合法的:

double pi = 3.14 + 0.0016;

但這樣初始化是不合法的:

double pi = acos(-1.0);

然而區域性變數這樣初始化卻是可以的。(page37)

⑤.如果全域性變數在定義時不初始化則其初始化值是0,如果區域性變數在定義時不初始化則其初始化值是不確定的。故,區域性變數在使用之前一定要先賦值。

個人建議,對於變數的使用,都要進行初始化,這樣可以避免不必要的麻煩。(page38)

2011/02/22

讀書《linux c程式設計》ch4和ch5兩章。(2)

這兩章主要講解「分支語句」和「深入理解函式」,內容較少。相比《c++ primer》,這本書有較大的空間需要提公升,然而,還是有一些知識點需要總結,備忘如下:

①.c99標準(c語言最新的規範)規定,%運算子(求餘)的結果總是與被除數同號。其他程式語言對取模運算的規定各不相同,也有規定結果和除數同號的,也有不做明確規定的。(page43)

②.switch..case語句中,case後面的表示式必須是常量表示式,這個值和全域性變數的初始值一樣必須在編譯時計算出來。(page50)

③.math.h中的庫函式ceil和floor的使用:

ceil(1.5)==2.000000    ceil(-1.5)==-1.000000

floor(1.5)==1.000000   floor(-1.5)==-2.000000(page54)

④.函式的返回值不是左值,或者說函式呼叫表示式不能做左值。(page52)

寫程式驗證,這句話是錯誤的,當乙個函式返回乙個位址時,程式可以對這塊位址進行操作,包括賦值、取值操作,因此,函式的返回值可以直接充當左值。

⑤.盡可能復用以前寫的**,避免編寫重複的**。封裝就是為了復用,把解決各種小問題的**封裝成函式,在解決多個大問題時,都可以重複利用。(page57)

這也是軟體工程中講的,「低耦合,高內聚」。

2011/02/23

讀書《linux c程式設計》ch6和ch7。(2)

這兩章主要講解「迴圈語句」和「結構體」,都是一些老掉牙的知識點,書上也沒特別重要的內容。

其中,在講goto語句和標號時,有一段很有意思的**,巧妙地利用了switch和while的巢狀,不使用break語句,簡單漂亮地解決了邊界條件的問題,提高了執行效率。

讀書《linux c程式設計》ch8和ch9兩章。(2)

這兩章主要講解「陣列」和「編碼風格」,有一些小知識點:

①.呼叫c標準庫函式得到的隨機數其實是偽隨機數,是用數學公式算出來的確定的數。

使用rand之前,為了保證隨機數的無規律性,即每次執行結果不同,我們通常使用系統時間來完善之,即srand(time(null))。(page93)

②.課後練習,輸出n個數的排列,分別用遞迴、非遞迴實現。抽空完成。(page94)

③.linux下的變數和函式命名方法,通常採用小寫字母和下劃線組合的方式,和c++普遍使用的匈牙利命名法(camelcase)有所不同。(page108)

2011/03/01

讀書《linux c程式設計》ch11。(2)

這一章主要講解「排序和查詢」,有難度,也比較重要,需要好好總結一下:

①.插入排序,開闢一塊新記憶體,將原來的數列一一拷貝進去,每次拷貝都要從頭到尾校驗,填到相應的位置,直到原來的數列為空為止。時間複雜度o(n*n)。

②.氣泡排序,從無序數列的第二個數字開始,分別與上乙個數比較,若小於上乙個數,則交換位置,這樣下去,可以選出數列中最大的數字,放到最後,然後對前n-1位進行同樣的處理。時間複雜度o(n*n)。

③.選擇排序,和冒泡原理一樣,只不過在尋找第k大的數時,採用標記記錄,減少了變數交換的次數。時間複雜度o(n*n)。

④.歸併排序,採用分治思想,這是一種遞迴的思想,在保證數列前半部分和後半部分分別有序的前提下,進行兩個有序數列的合併操作。時間複雜度o(n*lg(n))。

⑤.快速排序,同樣採用分而治之的策略,效率較高。和歸併不同的是,快排是先保證數列的前半部分都小於後半部分,然後分別對前半部分和後半部分進行快速排序。時間複雜度o(n*lg(n))。

⑥.堆排序實現起來較難,在最壞的情況下,其時間複雜度是o(n*lg(n))。相對於快速排序來說,這是堆排序的最大優點。

以上具體實現細節可以上網查閱資料,或者參考《資料結構》(嚴蔚敏)。查詢方法略。

2011/03/02

讀書《linux c程式設計》ch12。(1)

此章主講「棧和佇列」,其中,涉及對解迷宮問題有較好的講解。在此,不贅述。

關於linux的學習,上週剛安裝了ubuntu,這一周熟悉環境,並做一些簡單的程式設計,從hello world開始。

c++的學習,還以c++ primer為主,好好研究。

程式設計總結

步入大學已經兩個多月了,兩個月讓我從對計算機一無所知變成了乙個稍微會一點點的菜鳥,那這兩個月我到底學到了什麼呢?一丶順序結構 課本上第一節講的就是順序結構,那按照教材的規律來看,這應該也是最簡單的一節,事實也確實如此,順序結構就是直接一串下來,標頭檔案 include包含了基本的輸入 scanf 與...

極限程式設計 xp程式設計 總結

1.什麼是xp程式設計 極限程式設計 xp是勇氣,交流,反饋和簡單。xp是軟體開發過程中的紀律,它規定你 必須在程式設計前些測試,必須兩個人一起程式設計,必須遵守程式設計規範 xp是把最好的實踐經驗提取出來,形成了乙個嶄新的開發方法。2.xp適用範圍 極限程式設計,也被叫做xp,適用於中小型團隊在需...

VC程式設計總結

1.顯示和隱藏標題欄 方法一 使用api實現 隱藏titlebar long lstyle getwindowlong this m hwnd,gwl style setwindowlong this m hwnd,gwl style,lstyle ws caption setwindowpos t...