簡體   English   中英

C ++指針與數組和指針轉換

[英]C++ pointer vs array and pointer casting

我正在嘗試以下代碼:

unsigned long * foo = (unsigned long *) 0x200000;

因此,據我所知,foo指向無符號長0x200000。 現在,如果我嘗試,

std::cout<<foo[0];

我認為這應該打印值0x200000 (可能是十進制)。 因為, foo[0] = *(foo + 0) = 0x200000 但是,它實際上打印0

我在這里想念的是什么?

你誤會了,

unsigned long * foo = (unsigned long *) 0x200000;

將0x200000解釋為unsigned long的地址。 由於這極不可能是您可以在程序中合法訪問的unsigned long地址,

std::cout<<foo[0];

幾乎可以肯定是不確定的行為,並可能導致段錯誤。 但是,在您的情況下,訪問該內存位置不會導致段錯誤,並且那里的位被解釋並打印為unsigned long ,它們恰好都是0。

type * pointerName = addressItPointsTo;

pointerName[0]*pointerName相同,表示取消引用指針並在其指向的地址處獲取值。 它恰好是0,但是通常會導致分段錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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