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。
答案 0 :(得分:3)
您的程序显示未定义的行为,您正在执行的指针算术无效。
你只能在实际指向数组的指针上做指针算术,并且加法或减法的结果仍然必须指向数组内部(或者如果你不打算取消引用它,则必须指向数组的结尾)。
所以任何事情都可能发生,编译器可以为该代码生成任何代码。
答案 1 :(得分:2)
在分配p-1
后,您不能引用&k
这对您来说是无效指针,并且使用它的行为未定义。
答案 2 :(得分:0)
如果您的迷失指针遇到引发该错误的内容,例如某些受保护的内存或稍后将在某些计算(0)中成为除数的位置,则仅发生运行时错误。