簡體   English   中英

C ++ uint64和* uint64之間有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM