もし私が配列を持っていて、配列のid '番目の要素にポインタを割り当てたいのであれば、これらは同等ですか?これには括弧が必要ですか?&(Array [id])?送信要素#idのポインタ
int* hello = &Array[id];
int* hello = &(Array[id]);
もし私が配列を持っていて、配列のid '番目の要素にポインタを割り当てたいのであれば、これらは同等ですか?これには括弧が必要ですか?&(Array [id])?送信要素#idのポインタ
int* hello = &Array[id];
int* hello = &(Array[id]);
いいえ、かっこは必要ありません。はい、これら2つは同等です。配列の添字has higher precedenceはアドレス演算子よりも大きい。
しかし、Cには、(Array
がint
-sまたはint
へのポインタの配列であると仮定して)
int *hello = Array+id;
と等価です。
そしてIは、ポインタ加算を使用して、代わりの配列要素のアドレスを取得するCに、すなわち、より慣用的な、より一般的であると言うあえて(それが味の問題です)。
PS。その等価性はC++では真実ではない。 operator +
とoperator []
はユーザ定義することができます(ただし、int-sへのポインタではありません)。
* everything * postfixが最も高い優先度を持つので、 ' - > 'のような演算子は、常に中置演算子と接頭演算子の前に適用されます。 – caf