c語言之父寫的c語言指南,閱讀的時候怎麼能不懷著一點點崇敬的心情。
這本書的第一觀感是真的很薄,一共250+頁,從167頁開始就是附錄了。整個目錄只有3頁紙,這麼薄的書在我的書架上只有《c陷阱與缺陷》能夠一戰。
進入到正文開始閱讀後發現,資訊量真的很大,要在這一百多頁中介紹c語言的基本使用,資訊密度可想而知。讀起來並不輕鬆,不是太推薦c語言純新人閱讀,真怕造成「c語言從入門到放棄」。
這裡我摘錄一些讀書的心得和要點,進一步壓縮篇幅,方便自己在時間緊迫的情況下快速梳理所有要點。
為了驗證書中的**和做書中的練習,需要準備乙個能夠編譯和執行c語言程式的環境。為了簡便起見,我使用了ubuntu系統,命令列方式編譯執行比較方便快捷。
為了少打一些字,提高效率,使用以下makefile來編譯目錄下所有的.c檔案到對應的可執行檔案:
[makefile]
src := $(wildcard *.c)
obj := $(patsubst %.c, %.o, $(src))
out := $(patsubst %.o, %,
$(obj))
%.o: %.c
gcc -c -o $@
$<
%:%.o
gcc -o $@
$^all: $(out)
clean:
rm -f $(obj) $(out)
這樣,每次修改或者新編寫了乙個c語言程式原始檔後,直接在命令列執行 make 就可以了。
printf函式不會自動新增換行符,多條printf並不會自動產生行的輸出
轉義字元序列,escape sequence,\n \t \b \」 \\
#include
int main()
#include
int main()
return
0;}
#define leap 1 /* 閏年*/
int days[31 + 28 + leap + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31]; /* 這些數字常量和符號常量在編譯的時候,就進行了求值,所以編譯之後就是一年的天數了*/
#include
int main()
#include
int main()
printf("line number: %.0f\n", nl);
return
0;}
/* strlen函式:返回字串s的長度*/
intstrlen(char s)
靜態變數
複雜型別變數
enum months ;
enum months a;
enum months b;
a = jan;
b = may;
/* atoi函式:將字串s轉換為相應的整數*/
int atoi(char s)
return n;
}/* strcat函式:將字串t接到字串s的尾部,s必須有足夠大的空間*/
void
strcat(char s, char t)
/* getbits函式:返回x中從第p位開始的n個位*/
unsigned getbits(unsigned x, int p, int n)
/* 刪除數字最右邊的一位值為1的二進位制位*/
/* 可以用於快速判斷是否是只有乙個位等於1的二進位制數 */
x &= (x - 1);
C語言 運算子與 運算子
我們平時使用帶參巨集時,字串中的巨集引數是沒有被替換的。例如 輸出結果為 然而,我們期望輸出的結果是 5 20 2513 14 27 這該怎麼做呢?其實,c語言允許在字串中包含巨集引數。在類函式巨集 帶參巨集 中,號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果a是乙個巨集形參,那麼 a就是...
C 語言程式設計 運算子
運算子的優先順序 程式編譯流程與 gcc 編譯器 c 語言程式設計 基本語法 c 語言程式設計 基本資料型別 c 語言程式設計 變數與常量 運算子是一種告訴編譯器執行特定的算數或邏輯操作的符號。note 求餘運算子的運算元只可以為整型。note 自增運算子和自減運算子的運算元只可以為變數,不能為常量...
C語言運算子表
運算子按照優先順序大小由上向下排列,在同一行的運算子具有相同優先順序。第二行是所有的一元運算子。運算子解釋 結合方式 括號 函式等 陣列,兩種結構成員訪問 由左向右 型別 sizeof 否定,按位否定,增量,減量,正負號,間接,取位址,型別轉換,求大小 由右向左 乘,除,取模 由左向右 加,減 由左...