重複の可能性:
C では、ポインターを宣言するための正しい構文は何ですか?
C/C++ で「何かへのポインター」を記述する良い方法
現在、C に関する本を読んでいます。現在、ポインターについて読んでいます。
基本的には、コンセプトは理解できたと思います。とにかく、1つのことが私を困惑させます:
たまに作者が使う
void *foo;
新しいポインターを作成しますが、場合によっては
void* foo;
違いはありますか?それは問題ですか?そうじゃない?いつ何を使う?...?
重複の可能性:
C では、ポインターを宣言するための正しい構文は何ですか?
C/C++ で「何かへのポインター」を記述する良い方法
現在、C に関する本を読んでいます。現在、ポインターについて読んでいます。
基本的には、コンセプトは理解できたと思います。とにかく、1つのことが私を困惑させます:
たまに作者が使う
void *foo;
新しいポインターを作成しますが、場合によっては
void* foo;
違いはありますか?それは問題ですか?そうじゃない?いつ何を使う?...?
* の両側に好きなだけスペースを入れることができます。どちらの方法でもまったく同じことを意味します。
void*foo;
void *foo;
void* foo;
void * foo;
void * foo;
void * foo;
void * foo;
すべてまったく同じものです。プロジェクトに取り組んでいる場合、通常、そのプロジェクトで優先されるものを説明する「コーディング スタイル標準」があります。ただし、コンパイラは、スペースがある場合/場所に基づいて、何の違いもありません。
これらは同等ですが、1 行で非 void 型の複数の変数を宣言する場合は、前者の方が望ましい場合があります。
int *foo, *bar;
2 つのポインターを明確に宣言しますが、
int* foo, bar;
1 つのポインターと 1 つのポインターを宣言します。int
どちらも同等であり、違いはありません。
int *foo, i;
ただし、上記のような宣言の違いを知っておく必要があります。ここでfooはポインタ型のみであるのに対し、iは型int(not int*) です。
おそらくすでにご存じのとおり、コンパイラに違いはありません。
void* ptrスタイルの問題としては、型名が全体として分離されているため、その方が良いと主張する人もいます。問題は、それが言語の仕組みではないということです:
int* ptr, otherptr; /* otherptr is not a pointer here */
一度に複数の変数を宣言しないことに決めたとしても、分離された型名を持つという全体的な考え方は、配列と関数ポインターでは壊れます。それが私が他のスタイルを好む理由です:
int *ptr, *otherptr, dontDeclareTooManyThings[N];
違いはありますか?
もちろんあります。(存在しない場合は、これを尋ねることはありません。) 星は、最初のケースでは空白の片側にあり、他のケースでは反対側にあります。
それは問題ですか?
します。ただし、プログラム ロジックに関してではありません。この 2 つはまったく同じ方法で解析されます。ただし、個人の好みの問題です。通常は 2 番目の方法をお勧めします。つまりvoid *ptr、ポインター修飾子 (アスタリスク) は型ではなく変数を変更するためです。
いつ何を使う?
説明しただけです。
2 つの構文は同等です。唯一の違いはスタイルの問題です。
どちらのバリアントも有効です。それらは異なるスタイルを表しています。
検討
char* foo, bar;
char *foo, bar;
どちらの場合も、foo はポインターですが、bar はそうではありません。
も考慮する(可読性)
char* foo() {
// return something
}