要澄清这个问题,请观察c/c ++代码片段:
int a = 10, b = 20, c = 30, d = 40; //consecutive 4 int data values.
int* p = &d; //address of variable d.
Run Code Online (Sandbox Code Playgroud)
现在,在visual studio(2013年测试)中,如果p == hex_value的值(可以在调试器内存窗口中查看),那么,您可以观察到,其他变量a,b,c和d的地址是每个都有12个字节的差异!
那么,如果p == hex_value,则遵循:
&c == hex_value + 0xC (注意十六进制C是十进制的12)
&b == &c + 0xC
&a == &b + 0xC
Run Code Online (Sandbox Code Playgroud)
那么,为什么有12个字节的偏移而不是4个字节 - int只有4个字节?
现在,如果我们声明一个数组:
int array[] = {10,20,30,40};
Run Code Online (Sandbox Code Playgroud)
值10,20,30,40每个都按预期位于4个字节的差异!
任何人都可以解释这种行为吗?