ホームページ >バックエンド開発 >C++ >C の `*ptr `、`* ptr`、` *ptr`、および `(*ptr) ` の違いは何ですか?

C の `*ptr `、`* ptr`、` *ptr`、および `(*ptr) ` の違いは何ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-11 03:03:12857ブラウズ

What's the Difference Between `*ptr  `, `*  ptr`, `  *ptr`, and `(*ptr)  ` in C?

ポインター式: ptr 、 ptr 、および *ptr のナビゲート

これらのポインター式は、C プログラミングでよく使用されます。理解するのが難しい場合があります。詳細な説明は次のとおりです:

1. *ptr

  • 優先順位: * (間接) は (増分) よりも優先されます。
  • 式の値: を評価します前の ptr が指す値に
  • 副作用: ptr を 1 メモリ単位ずつ増分します。

例:

int a = 5;
int *ptr = &a;

*ptr++; // evaluates to 5, then increments ptr to point to the next integer

2. * ptr

  • 優先順位: (増分) と * (間接) の優先順位は同じです。
  • 式の値: を評価します。その後の ptr が指す値に
  • 副作用: ptr を 1 メモリ単位ずつ増分します。

例:

int a = 5;
int *ptr = &a;

*++ptr; // evaluates to 6 (a++) and increments ptr

3. *ptr

  • 優先順位: (増分) と * (間接) は同じ優先順位を持ちます。
  • 結合性: 右-左へ。
  • 式値: ptr が指す値をインクリメントします。
  • 副作用: なし。

例:

int a = 5;
int *ptr = &a;

++*ptr; // increments a to 6

4. (*ptr)

  • 優先順位: 括弧は優先順位ルールをオーバーライドします。
  • 式の値: で逆参照された値に評価されます。前にptr
  • 副作用: 逆参照された値をインクリメントします。

例:

int a = 5;
int *ptr = &a;

(*ptr)++; // evaluates to 5, then increments *ptr to 6

ptr , ptr および ptr がクラッシュする可能性がある一方、(ptr) は、ptr が文字列リテラルを指している場合にクラッシュする可能性があります。

以上がC の `*ptr `、`* ptr`、` *ptr`、および `(*ptr) ` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。