初探注釋規則
由程式及結果分析發現:
y=x/*p是什麼意思?
作者本意:把 x 除以 *p 的結果賦值給 y
編譯器:將 /* 作為一段注釋開始,把 /* 後的內容都當成注釋內容,直到 */ 出現為止
在編譯器看來,注釋和其它程式元素都是平等的,可以在 / 與 * 之間新增空格,所以,作為程式設計師也不能看輕注釋。
注釋注意
注釋應該準確易懂,防止二義性,錯誤的注釋有害而無利
一目了然的**避免加注釋
不要用縮寫來注釋**,這樣可能會產生誤解
注釋用於闡述原因,而不是用於描述程式的執行過程
注釋符「//」後面盡量空乙個格,再寫注釋,注釋和**段對齊,效果更好。
//高通**注釋if(
!nerr)
接續符的使用:
編譯器會將反斜槓剔除,跟在反斜槓後面的字元自動解到前一行
在接續單詞時,反斜槓之後不能有空格,反斜槓的下一行之前也不能有空格
接續符適合在定義巨集**塊時使用(definede定義的巨集必須在一行之內完成)
轉義符轉義符()主要用於表示無回顯字元,也可用於表示常規字元
c 語言中的反斜槓 ( \ ) 同時具有接續符和轉義符的作用:
當反斜槓作為接續符使用時可直接出現在程式中
當反斜槓作為轉義符使用時必須出現在字元(單引號)或字串(雙引號)中
基本概念
c語言中的單引號用來表示字元字面量。
( 』a』 表示字元常量在記憶體中佔1個位元組 』a』 + 1表示 』a』 的ascii碼加1,結果為 』b』)
c語言中的雙引號用來表示字串字面量。
(」a」 表示字串常量在記憶體中佔2個位元組,」a」 + 1表示指標運算,結果指向 」a」 結束符 』\0『)
字元字面量被編譯為對應的 ascii 碼,字串字面量被編譯為對應的記憶體位址。
printf的第乙個引數被當成字串記憶體位址。
記憶體的低位址空間不能在記憶體中隨意訪問。
混淆概念的**
範例一
#include
p1, p2, p3 指標指向記憶體如下圖所示,其中 p1, p2 指向的記憶體位址很低,而在乙個作業系統裡面,低位的位址一般保留起來給作業系統用的,我們一般操作0x08048000之後的位址。printf列印指標(也就是字串),但p1, p2 指向內容不是字串,故出現段錯誤。
printf原型為printf(char* fmt ….) , printf(』\n』);表示指標fmt 指向 『\n』;(『\n』的值為10),同理出現段錯誤。
範例二
#include
intmain()
return0;
}
分析:
1. 編譯後字串" "的記憶體位址被賦值給變數 c
2. 記憶體位址占用4個位元組,而變數c只占用1個位元組
3. 由於型別不同,賦值後產生截斷
程式中的短路規則
邏輯或(||)從左向右開始計算
邏輯與(&&)從左向右開始計算:
&& 比 || 具有更高優先順序
非(!)
C語言深度解剖 符號
一 注釋符號 1 和 c語言中,編譯器會將 注釋剔除,然後用空格去代替原來的注釋。2 這種形式的注釋不能巢狀,如 這是 非法的 因為 總是與離他最近的 匹配。3 y x p 或 y x p 表示 x 除以 p指向的記憶體裡的值,把結果賦值為 y 斜槓 和星號 之間沒有空格 就會被當作注釋的開始。4 ...
c語言筆記2 符號
1.注釋符號 編譯器在編譯中將注釋符號用空格代替 編譯器認為雙引號括起來的內容是字串 型注釋不能被巢狀 編譯器將 作為一段注釋的開始,把 後的內容作為注釋,直到出現 2.接續符 盡量不用 編譯器將反斜槓刪除,後面一行的內容自動接到前一行 在連線單詞時,反斜槓後不能有空格,下一行之前不能有空格 接續符...
含糊不清的C語言符號擴充套件
下面一段 會輸出什麼呢?char c 0xff if c 0xff printf successful n else printf failed n 答案是取決於不同的編譯器設定 注 gcc可通過新增編譯引數 fsigned char funsigned char來指定編譯器如何識別char 同樣的...