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.
我在这里缺少什么?
你误会了,
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.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |