a 本来指向的 1 的起始,也就是上面红色叹号的位置。加一之后,向后挪了一个字节也就是蓝色叹号那里。再输出 int 就是从那里取四个字节,是 (00,00,00,02) 由 little-endian 便是十六进制的 2000000。
但这种写法是危险的,结果也不具有移植性。
有些机器或者编译器对数据段的数据有严格的对齐限制:a 是 int 类型,所以 a 的齐起始地址在内存里一定是 4(即 sizeof(int))的整数倍。向前进了一字节后,地址被4除余一,在这个地址上进行 int 的读取操作会引发寻址异常。通常程序会表现为段错误。