0

重複の可能性:
C では、ポインターを宣言するための正しい構文は何ですか?
C/C++ で「何かへのポインター」を記述する良い方法

現在、C に関する本を読んでいます。現在、ポインターについて読んでいます。

基本的には、コンセプトは理解できたと思います。とにかく、1つのことが私を困惑させます:

たまに作者が使う

void *foo;

新しいポインターを作成しますが、場合によっては

void* foo;

違いはありますか?それは問題ですか?そうじゃない?いつ何を使う?...?

4

7 に答える 7

3

* の両側に好きなだけスペースを入れることができます。どちらの方法でもまったく同じことを意味します。

void*foo;
void *foo;
void* foo;
void * foo;
void                     * foo;
void *                     foo;
void           *           foo;

すべてまったく同じものです。プロジェクトに取り組んでいる場合、通常、そのプロジェクトで優先されるものを説明する「コーディング スタイル標準」があります。ただし、コンパイラは、スペースがある場合/場所に基づいて、何の違いもありません。

于 2013-01-26T11:56:41.343 に答える
3

これらは同等ですが、1 行で非 void 型の複数の変数を宣言する場合は、前者の方が望ましい場合があります。

int *foo, *bar;

2 つのポインターを明確に宣言しますが、

int* foo, bar;

1 つのポインターと 1 つのポインターを宣言します。int

于 2013-01-26T11:55:03.097 に答える
2

どちらも同等であり、違いはありません。

int *foo, i;

ただし、上記のような宣言の違いを知っておく必要があります。ここでfooはポインタ型のみであるのに対し、iは型int(not int*) です。

于 2013-01-26T11:53:59.867 に答える
1

おそらくすでにご存じのとおり、コンパイラに違いはありません。

void* ptrスタイルの問題としては、型名が全体として分離されているため、その方が良いと主張する人もいます。問題は、それが言語の仕組みではないということです:

int*  ptr, otherptr; /* otherptr is not a pointer here */

一度に複数の変数を宣言しないことに決めたとしても、分離された型名を持つという全体的な考え方は、配列と関数ポインターでは壊れます。それが私が他のスタイルを好む理由です:

int *ptr, *otherptr, dontDeclareTooManyThings[N];
于 2013-01-26T11:55:24.933 に答える
1

違いはありますか?

もちろんあります。(存在しない場合は、これを尋ねることはありません。) 星は、最初のケースでは空白の片側にあり、他のケースでは反対側にあります。

それは問題ですか?

します。ただし、プログラム ロジックに関してではありません。この 2 つはまったく同じ方法で解析されます。ただし、個人の好みの問題です。通常は 2 番目の方法をお勧めします。つまりvoid *ptr、ポインター修飾子 (アスタリスク) は型ではなく変数を変更するためです。

いつ何を使う?

説明しただけです。

于 2013-01-26T11:56:33.130 に答える
1

2 つの構文は同等です。唯一の違いはスタイルの問題です。

于 2013-01-26T11:52:57.880 に答える
0

どちらのバリアントも有効です。それらは異なるスタイルを表しています。

検討

char* foo, bar;
char *foo, bar;

どちらの場合も、foo はポインターですが、bar はそうではありません。

も考慮する(可読性)

char* foo() {
    // return something
}
于 2013-01-26T11:56:24.417 に答える