c語言小知識

2021-10-02 09:16:51 字數 1319 閱讀 5900

union的妙用在於各成員儲存在同一空間,我們可以通過union取成員操作得到記憶體中各位的儲存模式,否則你需要一大堆位運算操作取中間的幾位。節省操作!

#include

union bits32_tag byte;

//四個八位的位元組

} value;

intmain()

小端的機器上16進製制的47置c0(對應的ascii是g)同理可得c1=『f』,c2=『i』,c3=『e』

gfie

有時候總會看到int ch的原因?

while((ch=getchar())!=eof)

linux下eof的輸入是以ctrl+d而不是ctrl+z

其中 eof=-1,getchar()函式的返回值也是int型,若ch是int型則和eof 比較很正常,但若是char型有兩點壞處1–>>ch從getchar()擷取1個位元組,(是的,這裡getchar()會有可能接收到比ascii碼255以上的字元)再因為運算公升級為int之後才去和eof比較,而不一定是原來"正宗"得到的字元跟eof比較。2–>>列印一下char ch 下的得到的eof,以c%列印,出現了神奇的』�』,而(int)ch即強制轉換後得到的才是-1

#include

intmain()

但是我認為正常情況下在你的輸入都是ascii碼的情況下兩種情況貌似沒太大區別,我試了大部分字元沒啥問題。

如果繼續研究eof(end of file),你會發現乙個很好玩的現象。

因為讀取失敗,getchar()返回乙個-1,ctrl+d其實仍在輸入流裡

#include

intmain()

printf

("%c",(

char

)ch)

;printf

("a");

getchar()

;getchar()

;char

*s;scanf

("%s"

,s);

printf

("%s"

,s);

printf

("a");

getchar()

;}

列印結果是�a(null)a

因為停留在輸入緩衝裡的ctrl+d無法被讀取,隨後的getchar(),scanf()都失效了—>甚至printf冒出乙個奇怪的(null),(其餘的pintf正常執行)之後程式結束,end of file

這個ctrl+d彷彿擁有了遮蔽輸入流的作用。

C語言 小知識

1.表示式的求值 初始值 x 1,y 1 z 1 求 x y z 答 從左到右順序依次求值,1 true 注意 因為 操作符的左運算元是true,所以沒有必要求值了.事實上c語言肯定不會繼續求值 有關規則,在按從左到右的順序對乙個邏輯表示式求值的時候,只要知道了它的實際結果,就不會對其餘部分求值.這...

c語言小知識

1 為什麼include標頭檔案後,就可以呼叫檔案中宣告的函式了?標頭檔案中一般只是函式和變數的宣告,編譯器需要知道函式傳遞的是什麼引數,否則呼叫的地方 不知道如何設定暫存器和棧等一些相關資訊。至於函式的位置,由於在其他的編譯單元中,需要鏈結 時才能找到。標頭檔案中包含了函式的宣告,其具體的函式 即...

C語言小知識

nowcoder 牛客網 筆記 一 區域性變數與全域性變數 區域性變數不會影響全域性變數的值,使用完即會釋放 二 變數的傳遞 形參的修改對外部不影響 傳入引用與指標時在函式裡修改的將會傳遞出來 三 c語言與c 中的const void main 在c語言中結果為1,1 在c語言中const是執行時的...