C指標型別轉換問題

2022-02-05 04:17:31 字數 797 閱讀 4122

先看下面的**:

#includeint main ()

// 針對x86的處理器來說,其結果為513

原因程式首先宣告了乙個int變數,在我的電腦中,此int占用4位元組。然後宣告了乙個x指標,同樣,在我的電腦中它占用8位元組。然後將a的記憶體位址賦值給x指標,注意這裡用到了型別轉換:x=(char *) &a。如果不使用型別轉換,x指向的int型的記憶體單元大小為4位元組,如果使用了型別轉換,x指向的char型的記憶體單元大小為1位元組。

變數a的值為512,用4個位元組的普通二進位制表示就是:

00000000 00000000 00000010 00000000

由於x86 cpu的位元組序為小端序(最低有效位在最高有效位的前面),所以前面的二進位制以小端序的表示方式為:

00000000 00000010 00000000 00000000

操作方式是:先獲取最右邊的8位數字,然後放到新行的左邊;然後獲取下乙個8位數字,再放到新行的左邊,它緊挨著上乙個8位數字。以此迴圈操作,直到資料讀取完畢。注意的是乙個位元組(8位)裡的數字順序是不變的。

x[0]表示指向a記憶體區域的第乙個位元組,並設定為1,此時的a記憶體表示為:

00000001 00000010 00000000 00000000

然後是x[1]設定為2,則a記憶體表示為:

00000001 00000010 00000000 00000000

然後將a記憶體轉為普通二進位制表示方式(方式為從右到左讀取):

00000000 00000000 00000010 00000001

最後的結果為:

c 指標型別轉換

關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast dynamic cast reint...

C 的指標型別轉換

在c 中,指標的型別轉換是經常發生的事情,比如將派生類指標轉換為基類指標,將基類指標轉換為派生類指標。指標的本質其實就是乙個整數,用以記錄程序虛擬記憶體空間中的位址編號,而指標的型別決定了編譯器對其指向的記憶體空間的解釋方式。基於上面的理解,我們似乎可以得出乙個結論,c 中對指標進行型別轉換,不會改...

C語言指標型別和型別轉換

指標是強型別,意思是特定型別的指標變數存放特定型別變數的位址,比如int 需要乙個指向整形的指標來存放整形資料的位址,char 需要乙個指向字元型的指標來存放字元型資料的位址,那為什麼說指標是個強型別呢?指標不僅用來表示變數的位址,同時也得使用指標來解引用位址的內容,以此方便修改和使用變數的值。說到...