代码:
int main(){
short a=1; // #1
char *p=(char*)&a;
*(p)=1; // #2
cout << a << endl; // Output: 1
*(p+1)=2; // #3
cout << a << endl; // Output: 513
}
根据我的理解,输出应该如下图所示,257,然后是258。
运行上面的程序时我得到不同的结果有什么原因吗?
更新:
我知道这是未定义的行为,但这是否意味着十进制到二进制的转换没有像往常一样完成:从右到左,而是从左到右完成,例如:
binary(a)=1000 0000 | 0000 0000
所以*(p)=1;
将binary(a)=1000 0000 | 0000 0000
生成1
十进制的
,*(p+1)=2;
并将生成binary(a)=1000 0000 | 0100 0000
程序513
的输出。