次のコードは、yを大整数として出力します.15
ではありません。なぜか分からない。私は--
と++
演算子が*
演算子の前に来ることを知っているので、動作するはずです。C - インクリメントおよびデクリメントポインタ
以下のコードは何を言おうとしていますか。
/*
Create a variable, set to 15.
Create a pointer to that variable.
Increment the pointer, into undefined memory space.
Decrement the pointer back where it was,
then return the value of what is there,
and save it into the variable y.
Print y.
*/
int main()
{
int x = 15;
int *test = &x;
test++;
int y = *test--;
printf("%d\n", y);
return 0;
}
代わりにした場合、私は次のようにコードを変更します。
int main()
{
int x = 15;
int *test = &x;
test++;
test--;
printf("%d\n", *test);
return 0;
}
コード出力15
こと。どうして?
'test - 'は評価されていない値を評価するので、 '* test - 'はla-la-landを指すポインタを逆参照します。 '* - test'を使用した場合、それは問題ありません。 –
@JonathanLefflerしかし、プログラムが '* test - 'に出会ったら、まず 'test - 'を実行してから '* test'を実行します。私は ' - 'が '*'の上に存在するということを読んでいます。そうでない場合、正確に '* test - 'の行で何が起こっているのでしょうか? – Hatefiend
@Hatefiendだから、 'y'は' x'からsizeof(int)を差し引いたアドレスになります。 – Jezor