《c程式語言》讀書筆記(一)1 4

2021-06-20 00:28:14 字數 2396 閱讀 8114

自己的一些思考:

1、printf和getchar的區別:

scanf printf  可以輸入輸出各種型別的變數,比如int float char,而且同時輸入 輸出多個也可以 如scanf("%d,%d",&a,&b);

getchar putchar 只能輸入輸出char型別的變數,而且只能同時輸入輸出乙個字元

scanf()函式取資料是遇到回車、空格、tab就會停止.。而getchar不會。

2、c語言中哪個鍵代表eof?

windows的控制台裡面可以通過ctrl + z來通知系統達到了檔案結束

linux/unix的shell裡面可以通過ctrl + d來表示達到檔案結束

3、有關型別轉換的注意事項:表示式中float型別的運算元不會自動轉換為double型別,這一點與最初的定義不同。

使用float型別主要是為了在使用較大的陣列時節省儲存空間,有時也為了節省機器執行時間(雙精度算術運算特別費時)。

原文筆記:

(一)導言

1、在c語言中,所有的變數都必須先宣告,後使用。宣告通常放在函式起始處,在任何可執行語句之前。

2、c語言各個型別的長度跟機器字長和編譯器有關。

3、c語言以及許多其他語言中,整數除法操作將執行舍位。

4、符號常量通常用大寫字母拼寫,這樣可以很容易與用小寫字母拼寫的變數名相區別。注意,#define指令行的末尾沒有分號。而struct結構體的末尾要加分號。

5、c語言的語法規則要求for迴圈語句必須有乙個迴圈體,單獨的分號表示空語句。

6、外部變數:(1)外部變數可以在全域性範圍內訪問,因此,函式間可以通過外部變數交換資料,而不必使用參數列。

(2)宣告外部變數時可以用extern語句顯式宣告,也可以通過上下文隱式宣告。

(3)某些情況下可以忽略extern宣告。在原始檔中,如果外部變數的定義出現在使用它的函式之前,那麼在那個函式中就沒有必要使用。

(4)如果程式包含在多個原始檔中,而某個變數在file1中定義,在file2和file3中使用,那麼在檔案file2跟file3中就必須使用extern宣告來建立該變數與其定義間的聯絡。

(5)外部變數的用途還表現在它們與內部變數相比具有更大的作用域和更長的生命週期。

(6)如果在外部變數的定義之前使用該變數,或者外部變數的定義與變數的使用不在同乙個原始檔中,則必須在相應的變數宣告中強制性的加上關鍵字extern。

(7)外部變數的初始化只能出現在其定義中。

7、定義與宣告的區別:定義表示建立變數或者分配儲存單元,而宣告指的是說明變數的性質,而不分配儲存單元。

(二)型別、運算子與表示式

1、標準庫函式strlen(s)可以返回字串引數s的長度,但是長度不包括末尾的『\0』

2、字元和字串之間的區別:『x』 和」x「是不同的。前者是乙個整數,其值是字母x在機器字符集中的數值;後者是乙個包含乙個字元x以及乙個結束符'\0'的字元陣列。

3、列舉相對於#define來說,他的優勢在於常量值可以自動生成。

4、如果變數不是自動變數(相對於靜態變數而言),則只能進行一次初始化操作,從概念上來講,應該是在程式開始執行之前進行,並且初始化表示式必須為常量表示式。

預設情況下,外部變數和靜態變數將被初始化為0.未經初始化的自動變數的值為未定義值,即無效值。

5、由&&與|| 連線的表示式按從左往右的順序進行求值,並且在知道結果值為真或假後立即停止計算。這一點容易在面試中考查。

(三)控制流

1、在switch語句最後乙個分支default分支的後面也加上乙個break語句,這樣做在邏輯上沒有必要,但是當我們需要向該switch語句後新增其他分支時,這種防範措施會降低犯錯誤的可能性(大神就是嚴謹)。

2、靜態變數:

(1)用static宣告限定外部變數與函式,可以將其後宣告的物件的作用域限定為被編譯檔案的剩餘部分。通過static限定外部物件,可以達到隱藏外部物件的目的。

(2)如果把函式宣告為static型別,則該函式名除了該函式宣告所在的檔案可見外,其他檔案都無法訪問。

(3)static也可以宣告內部變數。是某個特定函式的區域性變數,只能在該函式中使用,但是它與自動變數不同的是,不管其所在的函式是否被呼叫,它一直存在,而不像自動變數那樣,隨著函式的被呼叫和退出而存在或消失。

即static型別的內部變數是一種只能在某個特定函式中使用但是一直占用儲存空間的變數。

3、暫存器變數:

register宣告告訴編譯器,它所宣告的變數在程式中使用頻率較高。

4、遞迴並不節省儲存器的開銷,因為遞迴呼叫過程中,必須在某個地方維護乙個儲存處理值得棧。遞迴的執行速度並不快,但是遞迴**比較緊湊。

5、include

(1)引號:原始檔中查詢

6、巨集#define指令定義的名字的作用域從其定義點開始,直到被編譯的原始檔的末尾處結束。

可以通過#undef指令取消名字的巨集定義,這樣可以保證後續的呼叫是函式呼叫,而不是巨集呼叫。

《c程式語言》讀書筆記

舉例如下 char a 10 1 定義的時候直接用字串賦值 char a 10 hello 注意 不能先定義再給它賦值,如 char a 10 a 10 hello 這樣是錯誤的!2 對陣列中字元逐個賦值 char a 10 3 利用strcpy char a 10 strcpy a,hello 易...

《C程式語言》 讀書筆記

在mac下可以使用sublime進行c語言程式編寫,然後通過命令列來執行c程式。在sublime新建乙個c程式,譬如 test.c include main 然後在命令列中執行 cc test.c編譯後會自動生成乙個a.out檔案,然後我們執行a.out檔案 test.c就會在命令行內列印出 hel...

c 程式設計 讀書筆記 一

2016.12.3 2016.12.4 完成乙個程式的設計工作分三步 寫出乙個好程式,最關鍵的就是去設計這些類 如何用c 寫出優秀的程式 第三章 一些關於string操作 p68 string s 裁剪字串 s.substr a,b a 字串裡乙個下標的位置 b 所需字串長度 替換字串 s.repl...