我有一个未定义的行为代码,如下所示:
此代码意外运行
int a;
*(&a+1000) = 12;
cout << *(&a+1000) << endl;
上述代码不允许我指出该地址的值。但是为什么要这样:
此代码按预期运行
int a[0];
*(&a[0]+1000) = 12;
cout << *(&a[0]+1000) << endl;
工作了吗?我已经尝试过了,这里没有问题。这种未定义的行为正在执行我所期望的。 &a+1000
引用的地址与&a[0]+1000
引用的地址相同。但是,为什么通过&a+1000
指向价值却不能通过&a[0]+1000
指向我呢?