int main()
{
int i,j,k;
i=1;j=2;k=3;
int *p =&k;
*(p-1)=0;
printf("%d%d%d",i,j,k);
getch();
}
输出为 1 2 3。
int main()
{
int i,j,k;
i=1;j=2;k=3;
int *p =&k;
*(p-1)=0;
printf("%d%d%d",i,j,k);
getch();
}
输出为 1 2 3。
您的程序表现出未定义的行为,您正在执行的指针算术无效。
您只能对实际指向数组的指针进行指针运算,并且加法或减法的结果必须仍指向数组内部(或者如果您不打算取消引用,则指向数组的末尾)。
所以任何事情都可能发生,编译器可以为该代码生成任何感觉的代码。
p-1
分配后不允许引用&k
this 对你来说是一个无效的指针,并且使用它的行为是未定义的。
仅当您的杂散指针碰到引发该错误的某些东西时,才会发生运行时错误,例如某些受保护的内存或稍后将在某些计算中成为除数 (0) 的位置。