C程式語言(一)導言,型別 運算子與表示式

2021-08-05 18:45:38 字數 1938 閱讀 2313

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 否定,按位否定,增量,減量,正負號,間接,取位址,型別轉換,求大小 由右向左 乘,除,取模 由左向右 加,減 由左...