0

重複の可能性:
C では、型の後ろではなく、変数名の前にアスタリスクがあるのはなぜですか?
ポインタの宣言; タイプと名前の間のスペースの左または右にアスタリスク?

私はしばらくの間ポインターを使用しており、次のようなポインターを宣言するために使用されていました

int *x;

しかし、いくつかのコードを通して気づいたのは、 * がデータ型の後にあるように見える場合があることです。

void* setValue(){
 /*          */
}

何が違うのか、なぜそのように使われるのか

4

5 に答える 5

13

意味的には何もありません。スタイルです。

変数のすぐ隣に星印を付ける利点は、この一般的なエラーを防ぐことです。

char* str1, str2;
/* str2 is a char, not char* ! */

char *str1, *str2;
/* ok */

この問題は戻り値の型には存在しないため、それほど重要ではありません。

于 2012-07-17T10:23:20.297 に答える
2

違いはありません。場合によっては、右に置いた方が良い場合があります。

int* p1,p2;

p1 と p2 の ara ポインターのように見えますが、p1 のみです。

int *p1,p2;

今は少し見栄えが良くなりましたが、良いスタイルはそれを別々の行に分割することです:

int *p1;
int p2;
于 2012-07-17T10:27:12.550 に答える
2

と の違いとまったく同じa+bですa + b。つまり、違いはありません。空白は、トークンを区切るために必要な場合を除いて、まったく意味がありません。

于 2012-07-17T10:28:49.550 に答える
1

意味の違いはありません。

*の実際の型は であるため、通常は次の型xを保持することをお勧めしvoid *ます。ただし、C/C++ はスターを変数名にバインドするため、これは構文的に誤りです。

int *x, y; // declare one pointer to int x and one int y

個人的に*は真ん中をキープするようにしています

int * x;
于 2012-07-17T10:27:06.697 に答える
0

へのポインタ。一般的な不透明なポインタvoidとして示されています。void*それを(引数、結果として、変数、フィールドを介して...)渡して比較することはできますが、ポイントされたデータを取得する唯一の方法は、適切にキャストすることです。不適切なキャストは未定義の動作であり、プログラムをクラッシュさせる可能性があります。

*型の指示ポインタの前後のスペースについては、スタイルの問題です。スペースは、トークンの区切り記号 (および*それ自体がトークン) を除いて、それほど重要ではありません。

間隔に一貫性を持たせることを強くお勧めします。indentたとえば、ソース コードをインデントするなどのツールを使用できます(それに-Tオプションを渡すと、型名の適切なインデントに役立ちます)。GNUindentツールはスペースを正規化しており、その動作を調整するための多くのオプションがあります (それらをファイルに入れることができ.indent.proます)。C++ コードの場合は、astyle代わりにindent.

于 2012-07-17T10:24:41.437 に答える