次の質問は、最近のマイクロソフトのインタビューで尋ねられました。
2つの宣言の違いは何ですか?
int p=*(int*)i;
int p=*(int*)&i;
i
最初のものはポインタで、2番目のものi
は変数だと思います。
他に何かありますか?
1 つ目は、 に含まれる値i
を取得し、それをポインターとして扱い、int
そのアドレスにある値を取得します (可能な場合)。
2 番目は のアドレスを受け取り、i
それを int へのポインターにキャストし、そのアドレスの値を取得します。i
が の場合int
、 と同等p=i;
です。そうでない場合はCHAR_BIT *sizeof(int)
、 のアドレスから始まる最初のビットを取得し、i
それらを として (試みて) 処理し、int
作成される値を に割り当てますp
。
編集: はい、@R として。i
Martinho Fernandes さんは、 がオーバーロードされている場合operator &
、上記のいずれともかなり異なることを行う可能性があると指摘しました(つまり、 のアドレスの代わりに、返さi
れるもので始まりoperator &
ます)。
あなたがその言語を知っているなら、この質問は要約すると2つの違いは何ですか
i
と
&i
答えは、最初のケースではi
であり、2 番目のケースでは のアドレスでありi
、これら 2 つのいずれかに基づいてこれらすべての変換が行われるということです。