1. ホーム
  2. c++

[解決済み] C/C++におけるポインタ変数の正しい宣言方法 [終了しました]。

2022-12-22 07:18:55

質問

ポインタ変数を宣言する際に、以下のような記法を使う人がいることに気づきました。

(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番目の例)、変数にアスタリスクを付けるのが一般的なので、後者のスタイルをお勧めします。