[解決済み] C/C++におけるポインタ変数の正しい宣言方法 [終了しました]。
質問
ポインタ変数を宣言する際に、以下のような記法を使う人がいることに気づきました。
(a) char* p;
の代わりに
(b) char *p;
私は(b)を使っています。(a)の表記の根拠は何でしょうか? 文字ポインタは型そのものではないので、(b)の表記の方が理にかなっていると思います。 その代わり、型は文字であり、変数は文字へのポインタである可能性があります。
char* c;
これは、char*という型があり、変数cがその型であるように見えます。 しかし、実際には型はcharであり、*c(cが指すメモリ位置)はその型(char)です。 一度に複数の変数を宣言すると、この区別は明白になります。
char* c, *d;
これは奇妙に見えます。 cもdも文字を指す同じ種類のポインタです。 これでは、次の方が自然に見えます。
char *c, *d;
どのように解決するのですか?
Bjarne Stroustrup氏はこう語っています。
int* p;"とint *p;"の間の選択は、正しいか正しくないかの問題ではなく、スタイルと強調の問題です。C言語では式が重視され、宣言は必要悪に過ぎないとみなされることがよくありました。一方、C++は型に大きな重点を置いています。
典型的な C プログラマーは "int *p;" と書き、それを説明します "*p は int" を強調する構文で、そのスタイルの正しさを主張するために C (と C++) の宣言文法を指摘することができます。実際、文法では * は p という名前に束縛されます。
典型的な C++ プログラマは "int* p;" と書き、それを "p is a pointer to an int" と型を強調した説明をします。確かにpの型はint*です。私は明らかにこの強調を好みますし、C++のより高度な部分をうまく使うために重要だと考えています。
出典 http://www.stroustrup.com/bs_faq2.html#whitespace
一行で複数のポインタを宣言する場合(4番目の例)、変数にアスタリスクを付けるのが一般的なので、後者のスタイルをお勧めします。
関連
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] リファレンスとポインタの使い分け
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】C言語のchar arrayとchar pointerの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] 配列のベクトルを扱う正しい方法