我正在尝试以下代码:

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。

关于c++ - C++指针与数组和指针转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12733835/

10-11 22:38
查看更多