次の質問は、最近のマイクロソフトのインタビューで尋ねられました。
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 として。iMartinho Fernandes さんは、 がオーバーロードされている場合operator &、上記のいずれともかなり異なることを行う可能性があると指摘しました(つまり、 のアドレスの代わりに、返さiれるもので始まりoperator &ます)。
あなたがその言語を知っているなら、この質問は要約すると2つの違いは何ですか
i
と
&i
答えは、最初のケースではiであり、2 番目のケースでは のアドレスでありi、これら 2 つのいずれかに基づいてこれらすべての変換が行われるということです。