web-dev-qa-db-ja.com

ポインターが指しているintの増分値

int *count演算子を使用して、ポイントされている整数をインクリメントするintポインター(つまり、++)があります。私は電話すると思いました:

*count++;

ただし、ビルドの警告"expression result used"が表示されます。できる:電話

*count += 1;

しかし、++演算子の使用方法も知りたいです。何か案は?

65
joels

++は*と同等の優先順位を持ち、結合性はright-to-leftです。 here。 を参照してください。++はpointerに関連付けられますが、その後に増分が適用されるため、さらに複雑になります。ステートメントの評価。

発生する順序は次のとおりです。

  1. インクリメント後、インクリメント後のポインタアドレス値を一時的なものとして覚えておいてください
  2. インクリメントされていないポインタアドレスの逆参照
  3. Countにインクリメントされたポインターアドレスを適用します。countは、そのタイプのエンティティの次の可能なメモリアドレスを指します。

ステップ2で間接参照された値を実際に使用しないため、警告が表示されます。@ Sidarthが言うように、評価の順序を強制するには括弧が必要です。

 (*ptr)++
86
Doug T.

(*count)++を使用してみてください。 *count++は、ポインタを次の位置にインクリメントしてから、インダイレクションを使用している可能性があります(これは意図的ではありません)。

14
Sidharth Panwar