-1
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。

4

3 回答 3

3

您的程序表现出未定义的行为,您正在执行的指针算术无效。

您只能对实际指向数组的指针进行指针运算,并且加法或减法的结果必须仍指向数组内部(或者如果您不打算取消引用,则指向数组的末尾)。

所以任何事情都可能发生,编译器可以为该代码生成任何感觉的代码。

于 2012-04-29T08:03:36.977 回答
2

p-1分配后不允许引用&kthis 对你来说是一个无效的指针,并且使用它的行为是未定义的。

于 2012-04-29T08:04:05.167 回答
0

仅当您的杂散指针碰到引发该错误的某些东西时,才会发生运行时错误,例如某些受保护的内存或稍后将在某些计算中成为除数 (0) 的位置。

于 2012-04-29T08:08:11.310 回答