私は現在、Cを学ぶためにK & Rを使っています。ポインタと変数は同じように振る舞いますが、ポインタは変数であり、配列にはこの能力はありません。配列とポインタが異なる
私はこのことを理解しますが、次のコードは、私を少し混乱:
int len, nlines;
char *p, line[MAXLINES]; /* Confusing part */
あなたはそれがポインタに崩壊関数に配列を渡すとき、私は知っているが、ここにあなたが文字ポインタを宣言することができますし、それらが異なっていても同じ行の文字配列たぶん私は自分自身を混乱させているかもしれませんが、これは私にとっては変です。ありがとう!
char *p; // Pointer
char line[MAXLINES]; // Fixed-sized character array
彼らは、その基本型とどこがソースコード内で宣言された以外の方法で関連していない。ただ、同じ行に複数の変数を宣言し、これに相当します
ある彼ら場合は、1行に複数のものを宣言することができますですすべてが同じ "ルート"タイプを持っています。 'int w、x、y [5]、z(void);' 2つのint、int配列、およびintを返す関数を宣言します。宣言ごとに1つの識別子を優先して、この習慣を妨げる人もいます。 –
pはcharへのポインタです。行は、charのMAXLINESのサイズの配列です。 –
ここで混乱するのは、変数がルートタイプを「変更」できるということです。したがって、 'char a、* b、** c'は単一の文字' a'、文字 'b'へのポインタ、文字' c'へのポインタへのポインタを宣言します。同様に、配列は同様の宣言スタイルで使用されるときにルート型を '変更'します。結果的に、これは私が見た現代のC開発者のほとんどが、単一の宣言的な行ではなく[tadmanの答え](http://stackoverflow.com/a/43334568/510036)に示されている宣言スタイルを推奨する理由です。 – Qix