上記の式は次のようになります*(&(&(&(*(*(*X)))))
int x = 2; * &&& *** xは何を返しますか?
私が解決できる限り、コンパイラは(***X)
の値をトレースできると思います。しかし、値のアドレスを取得しようとするとどうなりますか? &(***X)
。これは使えますか?値はいくつかの乱数であるため、式です。コンパイラは値を検索してそのアドレスを返しますか?出力されない場合は何ですか?
上記の式は次のようになります*(&(&(&(*(*(*X)))))
int x = 2; * &&& *** xは何を返しますか?
私が解決できる限り、コンパイラは(***X)
の値をトレースできると思います。しかし、値のアドレスを取得しようとするとどうなりますか? &(***X)
。これは使えますか?値はいくつかの乱数であるため、式です。コンパイラは値を検索してそのアドレスを返しますか?出力されない場合は何ですか?
コンパイラエラーです。 intを逆参照することはできません。
説明してください。 –
あなたの仮定が間違っています:*&&&***x
は*(&(&(&(*(*(*X)))))
のように分解しないであろう、それは構文エラーが生じ、*
&&
&
*
*
*
x
としてトークン化されます。あなたはアドレスのアドレスを取ることができないので、*& & &***x
のようにスペースを追加する
は制約違反になり、また、あなたはポインタとしてint
変数x
間接参照することができます。
逆に、*&*&*&*&x
は、x
の値をとるためにはっきりとした方法ですが、0[&x]
です。
いいえ、xはint型なので問題が発生します。あなたが* xと言うとき、それは "xが指す変数の値が必要です"という意味です。あなたは2がメモリ内の有効なアドレスではないことを知っています。この原因のエラーです(割り当て可能な唯一の有効なアドレスは0です)。 xがint型であるため、intを参照解除することはできません。コンパイルエラーが発生します。
私の質問は素朴ですが、なぜintを参照できないのでしょうかと申し訳ありません。 –
@Saran kumarあなたはどこかを指し示すオブジェクトである参照を逆参照することしかできません。 intは指すことはありませんがintへのポインタは逆参照することができます – Holger
@Saran kumarあなたはアドレス自体を含むsthしか参照できません。それはポインタです。 int型にはアドレスが含まれていません。 –
あなたは '&(&x)'することはできません。 –