C語言深度解剖讀書筆記 2 字元的技巧

2021-08-27 14:30:15 字數 1801 閱讀 3876

本節接觸了,c語言中的三大蛋疼:符號優先順序 ++i順序點 貪心法(其實這裡面好多都是跟編譯器有關的,而且有好多問題都是可以通過良好的程式設計習慣避免的)

1.注釋問題:

注釋不能把關鍵字弄斷,如:in/*注釋*/t

注釋不是簡單的剔除,而是使用空格替換

編譯器認為雙引號括起來的內容都是字串,雙斜槓也不例外。如:char *p = "heh//jfeafe" //不起注釋作用

2.接續符:

接續符\ ,常用於巨集定義中

#define swap(a,b) \

反斜槓同時有接續符和轉義符兩個用途,當接續符使用的時候,可以直接在程式中出現。當轉義符使用的時候,必須是出現在字串中。

接續符,也用與接續乙個關鍵字,**如下, 注意:但是直接連線\兩邊不能有空格。

#include #include int main()

3.邏輯運算子:有乙個短路規則

4.最容易忘記規則的兩個運算子:

三目運算子:(a?b:c) 當a的值為真的時候 返回b的值,否則返回c的值

逗號表示式:a,b 表示式的值為b的值

5.位運算:

對於左移和右移<< >>問題:無符號的,和有符號左移,都是補0,對於有符號的在右移動的時候,正數補零,負數補什麼跟編譯器有關係。並且左移和右移的大小不能大於資料的長度,也不能小於0。

交換兩個數,有一種不借助中間變數的方法,就是異或,**如下:

#include #define swap1(a,b) \

#define swap2(a,b) \

#define swap3(a,b) \

int main()

6.i++,i--順序點:

只有 i++ i--才有順序點 就是什麼時候開始加,什麼時候開始減。真心對於順序點 是搞不懂啊~~~ (++i)+(++i)+(++i),在gcc中是5+5+6(dev c++),在vc中是6+6+6(vc++6.0) ,不同編譯器順序點不一樣。這個例子的順序點 在; 前。

a=((++i),(++i),(++i)) 它的順序點在每個逗號前面完成計算。我覺得特殊的順序點 是可以通過合理的順序布局來避免的。

7.貪心法:

每乙個符號應該盡可能多的包含字元

8.符號運算優先順序問題:

個人覺得優先順序不用記,好好的寫括號吧~~~

給乙個易錯優先順序表,如圖:

9.c語言中的型別轉換:

c語言中有兩種轉換型別,分別是:隱式轉換和顯示轉換(強制型別轉換)

隱式轉換的規則:

a.算術運算中,低型別轉換為高型別

b.賦值運算中,表示式的型別轉換為左邊變數的型別

c.函式呼叫時,實參轉換成形參的型別

d.函式返回值,return表示式轉換為返回值的型別

隱式轉換的例子,**如下:

#include int main()

else

printf("i+j=%d\n", i + j);

return 0;

}

注意:在使用c語言的時候,應該特別注意資料的型別是否相同,盡量避免隱式轉換帶來的不必要的麻煩~~~

C語言深度解剖讀書筆記 2 字元的技巧

本節接觸了,c語言中的三大蛋疼 符號優先順序 i順序點 貪心法 其實這裡面好多都是跟編譯器有關的,而且有好多問題都是可以通過良好的程式設計習慣避免的 1.注釋問題 注釋不能把關鍵字弄斷,如 in 注釋 t 注釋不是簡單的剔除,而是使用空格替換 編譯器認為雙引號括起來的內容都是字串,雙斜槓也不例外。如...

讀書筆記《c語言深度解剖》 4

10.struct關鍵字 這裡struct關鍵字講解得比較少,主要有3點 1 空結構體的大小為1 在gcc下我的輸出是0 2 柔性陣列 在c99中,允許結構最後乙個元素是乙個大小未確定的陣列,這個陣列叫做柔性陣列。但是柔性陣列前面必須至少有乙個其他成員。用sizeof返回結構體大小的時候,並不包含柔...

C語言深度解剖讀書筆記1

關鍵字 意義關鍵字 意義auto 宣告自動變數,預設時編譯器一般預設為auto register 宣告暫存器變數 int宣告整型變數 const 宣告唯讀變數 double 宣告雙精度變數 volatile 說明變數在程式執行中可被隱含地改變 long 宣告長整型變數 typedef 用以給資料型別...