1. /* */ 預處理時,編譯器會使用空格替換,所以:
in/*。。。*/t i = 0; // 是錯誤的, gcc -e 編譯後變成 in t i = 0;
2. y = x / *p 不等於 y = x/*p,
因為編譯器解析語法的時候,是從左到右,找最長的有意義的單元,對於第二段**,編譯器找到x後繼續往後找,判斷』x/』是否是合法的識別符號或者關鍵字,發現不是,於是記錄下』x』;
然後從』/』開始找,繼續向下找,判斷』/*』是否是有意義的符號,發現是,他是注釋的開始,但不會停止,編譯器繼續往下找,判斷』/*p』是不是有意義的符號,發現不是,於是記下』/*』;
再從』p』開始 …,
所以第二段語句是錯誤的,因為解析出來了』/*』但沒解析出*/,無法配對,所以報錯。
1. 存在短路現象:
int i = 0, j = 0;
if ((++i > 0) || (++j > 0))
// i = 1, j = 0
或(||)運算:從左到右,發現值大於0的條件後,後面的條件不會再計算;
與(&&)運算:從左到右,發現值等於0的條件後,後面的條件不會再計算。
位運算:按位或(|)、按位與(&)、 按位取反(~)、 按位異或(^)、 左移(<>)
int i = 1;
int j = (i\++, i\++, i\++); // 逗號表示式,i每遇到乙個逗號就認為本計算單元結束,自加
int y;
//每次y與10比較完,不管比較結果,y就認為本計算單元結束,自加,不是{}裡的算完就馬上加。
for ( y = 0; y < 10; y\++)
i = 1;
int k = (i\++) + (i\++) + (i\++); // i遇到;認為本次計算單元結束,把累積的三次自加全部執行一次,為6
計算單位結束後才會進行自增或者自減操作。
1. 運算子優先順序表
2. 運算子易錯點
反斜槓(\)作為連線符時,後面不能有任何字元,即使空格也不行。
printf("this is \
perfect!\n");
// 連線符後面不能加空格。
// 連線符下一行中如果前面為了對齊使用了空格,空格會被當做有效字元。
// 輸出: this is perfect!
《c語言深度剖析》讀書筆記(二)符號
本文是自己讀書的時候一些關於該書的重點及感悟 目錄 1 注釋符號 2 接續符和轉義符 3 單引號和雙引號 4 邏輯運算子 5 位運算子 6 花括號 7 操作符 8 c語言除法 9 符號優先順序 1 c 語言裡可以有兩種注釋方式 和 編譯器在編譯程式時的確會將注釋剔除,但不是簡單的剔除,而是用空格代替...
《c語言深度剖析》學習筆記4
第五章 記憶體管理 5.1 野指標 定義指標變數的同時,最好初始化為null,用完指標之後,也將指標變數的值設定為null.5.2 棧 堆和靜態區 靜態區 儲存自動全域性變數和static變數。靜態區的內容在整個程式的生命週期內都存在,有編譯器編譯時分配。棧 儲存區域性變數。棧上的內容只在函式的範圍...
《C語言深度剖析》筆記
c語言深度剖析 筆記 1.在c語言中,凡不加返回值型別限定的函式,就會被編譯器作為返 回整形處理。2.register 變數必須是乙個單個的值,並且其長度應小於或等於整型 的長度。而且 register 變數可能不存放在記憶體中,所以不能用取 址運算子 來獲取 register變數的位址。3.int...