[英]C++ whats the difference between uint64 and *uint64?
為什么:
const char example;
(uint64*)example
的值為140734799798420
和
*(uint64*)example
的值是7004431430466964258
ps不用擔心類型轉換,我很感興趣為什么第二個*
增加了值。
謝謝
您的代碼給出了未定義的行為。 您的第二行非法將字符轉換為指向uint64的指針(很可能是無效的指針)。 您的第三行嘗試取消引用此無效的指針。
詢問為什么要做什么是沒有意義的-它可以在不同的機器上做不同的事情,並且行為可能在下一版編譯器中改變。
只是不要這樣做。
正如其他人所說,您已經調用了未定義的行為。 不能保證任何特定的行為。
也就是說,您看到不同的值,因為您要在內存中打印不同的位置-第一個從存儲example
的存儲位置打印數據,第二個從作為 example
值存儲的存儲位置打印數據。
const char example
在堆棧上定義一個char
變量而不初始化它,所以它的值將是垃圾。 可能最后存儲在堆棧中的任何內容都沒有分配。
(uint64 *)example
將example
的值解釋為指向uint64
(的地址)的uint64
。 這會打印出example
存儲的值,就好像它是一個指針一樣。
*(uint64 *)example
取消引用該指針。 它將example
的值解釋為指向uint64(的地址)的指針,然后打印該地址處的內容,就好像它是uint64。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.