9

私はCでかなり新しいので、次の2つの変数宣言の違いがわかりません。

int* ptr;
int *ptr;

int* ptr;宣言では、ptrの値は変更できませんが、宣言では変更できると思いますが、int *ptr;

それかどうかはわかりませんが。

2つの宣言の背後にある概念は何ですか?

4

5 に答える 5

26

コンパイラにとって、2つの宣言の間に違いはありません。

人間の読者にとって、前者は「int*」タイプが同じステートメント内のすべての宣言に適用されることを意味する場合があります。ただし、*は次の識別子にのみバインドします。

たとえば、次のステートメントは両方とも1つのポインターのみを宣言します。

int* ptr, foo, bar;
int *ptr, foo, bar;

このステートメントは複数のポインターを宣言し、「int*」間隔の使用を防ぎます。

int *ptr1, *ptr2, *ptr3;
于 2011-10-17T21:06:56.053 に答える
4

Cのスペースはほとんど重要ではありません。スペースが重要な場合もありますが、これらはごくわずかであり、その間にあります。あなたが投稿した2つの例は同等です。

于 2011-10-17T21:07:29.813 に答える
2

他の人が言ったように。違いはありません。より複雑な C 型の宣言を理解したい場合は、このリンクが役に立ちます。C 宣言の読み取り

于 2011-10-17T21:12:07.183 に答える
1

これは、空白演算子のオーバーロードと呼ばれます。こちらを参照してください: http://www2.research.att.com/~bs/whitespace98.pdf

于 2011-10-17T21:15:10.213 に答える
1

int *p;

*p 


はコンパイラにとって意味がありません(int*) is a type named pointer

于 2011-10-17T21:42:29.190 に答える