int * i;またはint * i;またはint * i; [クローズ]

回答

int* i(C ++スタイル)。
視覚的にあいまいになるため、1つのステートメントで複数の変数を宣言することは避けています(int* i, j)。

関連項目 BjarneStroustrupのC ++スタイルとテクニックに関するFAQ の根拠

回答

複数の変数を宣言したいが、アスタリスクを繰り返したくない場合:

template <typename T> struct pointer_to { typedef T* type; }; pointer_to<int>::type p1, p2, p3; 

(構造体テンプレート内にあるように、 int* iスタイルが好きです。)

そして、より一般的な解決策は次のとおりです。

template <typename T> struct identity { typedef T type; }; identity<int*>::type p1, p2, p3; 

これは、配列や参照など、あらゆる「問題のあるタイプ」で機能します。

コメント

  • omg、c ++は常に新しいものを表示します:)。ありがとう!
  • OMG、C ++は恐ろしいです! typedef int* int_ptrでうまくいくでしょう。確かに、さまざまなポインタータイプに対して新しいtypedefを宣言する必要がありますが、実際にはいくつになりますか?せいぜい8つですか?
  • @benzado実際には、'正気の人が複数の変数を宣言することはないので、typedefや私が示した凝ったトリックは必要ありません。一行で。それでも興味深いです。
  • 私は、C ++プログラムが言語機能を使用できるという理由だけで使用する傾向についてもっと話していました。
  • @benzado:!!!私はこれを頻繁に見ました!

回答

最初の部分は変数の型(intへのポインター)を示し、2番目の部分は名前(i)を示しているため、私には意味がありません。タイプはintで、名前は*iです。また、int * i;は私には乗算に少し似ています。

コメント

  • C宣言構文は
  • div id = “a5e88b7a6c”>

型情報は識別子の後に簡単に来る可能性があるため、この点で一貫性がありません。配列が最も明確な例です。

  • @Roger:わかっていますが、この質問は特に単一の変数宣言についてであり、他には何もありません。
  • 'はそれを少し読んでいると思います。 :)私が質問を理解する方法では、'どこでどのスタイルを使用しているかを尋ねています。
  • @Roger:あなた'おそらく正しいですが、私の目的はOP 'の質問に答えることでした:"宣言するためのお気に入りの方法は何ですかポインタ?"。明らかに、誰もが質問で提示された問題を自由に見学することができ、ここでも奨励されています。 ' C / C ++で開発しない人として、そうすることは私の専門分野から大きく外れると感じました。
  • 回答

    int * i;を使用する宣言では、i is a pointer to an integer

    ポインタは型と変数の両方に寄与するため、中央に配置する必要があります。

    同じ行で複数のものを宣言しないようにすることをお勧めします:int * i, j;

    回答

    Cにはポインタタイプがありません!したがって、 “int * “は何も意味しません。アスタリスクは常にその右側に記述された要素にバインドされ、その右側の要素に属します。” * i “はintです。また、* iはintであるため、iはaになります。 intへのポインタ。それがその背後にあるロジックであり、それが「int * i」が唯一の可能な解決策である理由です。それ以外はすべて幻想です(ほとんどの場合、コンパイラーによって自動的に修正されます)。 C ++とC#では、それは何か違います。しかし、Cの場合、聖書は「デニスM.リッチー:Cプログラミング言語」だけです。デニス(RIP!)は、「int * i」と書いています。これに質問してください。

    コメント

    • " C

    -そのアイデアはどこで得ましたか?int*はポインタタイプです。

    回答

    実際には、特定の状況で3つの規則すべてを使用しています。一見、一貫性がないように見えますが…

    • int *識別子が存在しない場合、名前が存在しないことを視覚的に強調します。
    • int* intptr typedefおよび同様の宣言で、それが型の一部であることを視覚的に補強します。同様に、関数ポインタ宣言の場合:(int* (*foo)(int))
    • int *identifierおよびclass &identifier関数パラメーターを使用して、パラメーターがいわゆる「出力」パラメーターである可能性があることを視覚的に強調します。
    • const int * const * const cv を使用するときはいつでも修飾子。
    • int * foo;ローカル宣言について。

    私はやや視覚志向だと思います。

    回答

    int *iを使用します。これは、ポインタであることがわかりやすいためです。私はそれが本当に問題だとは思わない。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です