我正在尝试以下代码:
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/