-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();
}

出力は123です。

4

3 に答える 3

3

あなたのプログラムは未定義の動作を示します。あなたが行っているポインター演算は無効です。

実際に配列を指しているポインターに対してのみポインター演算を行うことができ、加算または減算の結果は依然として配列内 (または逆参照するつもりがない場合は、その末尾を超えたもの) を指している必要があります。

そのため、コンパイラは、そのコードのように感じられるコードを生成できます。

于 2012-04-29T08:03:36.977 に答える
2

p-1割り当てた後に参照することはできません&k。これは無効なポインターであり、使用時の動作は未定義です。

于 2012-04-29T08:04:05.167 に答える
0

実行時エラーは、たとえば、保護されたメモリや、後で何らかの計算 (0) で除数になる場所など、エラーが発生する何かに浮遊ポインターがヒットした場合にのみ発生します。

于 2012-04-29T08:08:11.310 に答える