私はCでかなり新しいので、次の2つの変数宣言の違いがわかりません。
int* ptr;
int *ptr;
int* ptr;
宣言では、ptr
の値は変更できませんが、宣言では変更できると思いますが、int *ptr;
それかどうかはわかりませんが。
2つの宣言の背後にある概念は何ですか?
私はCでかなり新しいので、次の2つの変数宣言の違いがわかりません。
int* ptr;
int *ptr;
int* ptr;
宣言では、ptr
の値は変更できませんが、宣言では変更できると思いますが、int *ptr;
それかどうかはわかりませんが。
2つの宣言の背後にある概念は何ですか?
コンパイラにとって、2つの宣言の間に違いはありません。
人間の読者にとって、前者は「int*」タイプが同じステートメント内のすべての宣言に適用されることを意味する場合があります。ただし、*は次の識別子にのみバインドします。
たとえば、次のステートメントは両方とも1つのポインターのみを宣言します。
int* ptr, foo, bar;
int *ptr, foo, bar;
このステートメントは複数のポインターを宣言し、「int*」間隔の使用を防ぎます。
int *ptr1, *ptr2, *ptr3;
Cのスペースはほとんど重要ではありません。スペースが重要な場合もありますが、これらはごくわずかであり、その間にあります。あなたが投稿した2つの例は同等です。
他の人が言ったように。違いはありません。より複雑な C 型の宣言を理解したい場合は、このリンクが役に立ちます。C 宣言の読み取り。
これは、空白演算子のオーバーロードと呼ばれます。こちらを参照してください: http://www2.research.att.com/~bs/whitespace98.pdf
int *p;
*p
はコンパイラにとって意味がありません(int*) is a type named pointer
。