C++指针与数组和指针转换

NGa*_*bit 1 c++ arrays pointers casting

我正在尝试以下代码:

unsigned long * foo = (unsigned long *) 0x200000;
Run Code Online (Sandbox Code Playgroud)

所以,据我所知,foo指向无符号长0x200000.现在,如果我尝试,

std::cout<<foo[0];
Run Code Online (Sandbox Code Playgroud)

我认为这应该打印值0x200000(可能是十进制).因为,foo[0] = *(foo + 0) = 0x200000.但是,它实际上是打印的0.

我在这里缺少什么?

Dan*_*her 5

你误会了,

unsigned long * foo = (unsigned long *) 0x200000;
Run Code Online (Sandbox Code Playgroud)

将0x200000解释为一个地址unsigned long.由于unsigned long您在程序中可以合法访问的地址极不可能,

std::cout<<foo[0];
Run Code Online (Sandbox Code Playgroud)

几乎肯定是未定义的行为,并可能导致段错误.但是,在您的情况下,访问该内存位置不会导致段错误,并且那些位被解释并打印为unsigned long,它们恰好都是0.