なぜ以下の違いがありますか?x = * p ++と* p ++の違いは何ですか; x = * p in c?
program001.c:
int main (void)
{
int a=3,*p,x;
p=&a;
*p++;
x=*p
printf("a=%d, *p=%d, x=%d\n",a, *p, x);
return 0;
}
result: a=3,*p=21974,x=21974
Program002.c:
int main (void)
{
int a=3,*p,x;
p=&a;
x=*p++;
printf("a=%d,*p=%d,x=%d\n",a,*p,x);
return 0;
}
result:a=3,*p=3,x=3
program001の結果のために、それは理解することができます:*のp ++未定義の値をポイントであるので、それは無理な結果です。
program002の結果は、program001と等しくないのはなぜですか?実施例1から
演算子の優先順位と結合性を調べてください。 –
「x」への代入に関してインクリメントがいつ発生するかを考えてください。 '* p ++'と '* ++ p'の違いも考慮してください。 –
また、* pがインクリメントされた後の* pがどこを指しているか考えて、[*未定義の動作*](https://en.wikipedia.org/wiki/Undefined_behavior)について学んでください。 –