C和指標,char擴充套件int 以及EOF的問題

2021-06-21 00:42:44 字數 350 閱讀 7475

最近看了c和指標,70頁下面小字提出了乙個有趣的問題,經翻閱資料,做出以下愚見:

首先,eof在標頭檔案裡面定義為-1,指的是檔案末尾的訊號。

當為有符號字符集時,輸入\377,擷取後8位即11 111 111,然後又擴充套件為int,因為是有符號字元,所以按高位擴充套件,即為全1(32個1),眾所周知,電腦儲存負數是按照補碼儲存的,所以當與eof進行比較時,全1int要通過反向運算(即減1,然後高位不變各位取反),得到的就是-1,等於eof,所以迴圈終止。

當為無符號字符集時,前面擷取都一樣,只是擴充套件為int時,因為是無符號字元,所以擴充套件位全為0,即000.....11 111 111,很明顯,絕逼是個正數,不可能等於-1,所以將永遠迴圈下去!

關於int型別指標和char型別指標相互轉換問題

今天在程式中遇到了int型別指標與char型別指標相互轉換問題,初看執行結果非常的不了解其具體的運作過程,通過查閱相關資料,並在程式中逐步除錯,最終搞清楚了這個問題,不多說,直接看下面程式 int main unsigned val 5 val val 24 val cout 其執行結果如下圖 看上...

C 中char和int轉換

1 整數轉化字串 sprintf 在標頭檔案 include中 語法 int sprintf string format,mixed args 返回值 字串長度 strlen 轉換字元 印出百分比符號,不轉換。c 整數轉成對應的 ascii 字元。d 整數轉成十進位。f 倍精確度數字轉成浮點數。o ...

char陣列和char指標

在c c 中,指標和陣列在很多地方可以互換使用,這使得我們產生一種錯覺,感覺陣列和指標兩者是完全等價的,事實上陣列和指標是有很大的區別的。1.兩者在含義上的區別。陣列對應著一塊記憶體區域,而指標是指向一塊記憶體區域。其位址和容量在生命期裡不會改變,只有陣列的內容可以改變 而指標卻不同,它指向的記憶體...