4

ポインター演算の説明を見てきました (例: Pointer Arithmetic )。しかし、私は次の間に本当の違いがあるのだろうかと思っていました
:

int* arr = (int*) malloc(sizeof(int) * 3);

行う:

&(arr[1])

と:

arr + 1

構文のほかに、何らかの点で異なります。どちらが技術的に効率的ですか?最初にポインター中毒を使用する特定のコンテキストはありますか? ループや条件なしで 1 から 1000 を印刷する例を見ました。前もって感謝します。

4

2 に答える 2

1

いいえ、パフォーマンスにも違いはありません (コンパイル時間について話している場合を除きます)。理由は次のとおりです。

  • arr[1]*(arr + 1)と同等です
  • 逆参照もアドレス演算子も何もし&(*(arr + 1))ないので (C 標準では、そのような場合には逆参照は発生しないと明示的に述べられています)、演算子は互いに打ち消し合います。

そのため、構文解析と AST 構築フェーズの後、コンパイラは最終的arr + 1に両方のケースで終了します。

于 2013-04-09T01:21:57.893 に答える