配列とポインタについて
ポインタ
C言語を学ぶ上で、一番重要で一番理解しにくいのがこのポインタです。プログラムを実行する際には、コンピュータのメモリ上にプログラムが展開され実行されます。その中で使用される変数などもメモリ上に存在し、その場所をアドレスと呼びます。そのアドレスを示す変数をポインタと呼ぶのです。
int data;
data = 33;
変数の宣言と初期値の代入です。宣言された時点で、メモリのどこかにint型のサイズ分の領域が確保され、そこと「data」という名前が関連付けられています。
int data;
int *buf;
buf = &data;
*buf = 33;
これはポインタを用いて同じことを行なった例です。まずdata変数を定義します。次に定義しているのはint型のポインタであるbufという変数です。3行目では、dataのアドレスをbufに格納しています。つまり、bufはdataが格納されている場所(アドレス)を知っているのです。最後に、その場所に値を格納しています。結果的に、dataに33が格納されているのです。アドレスは名前の通り「住所」を表し、そこに住んでいるのが「data」という人だとイメージするとわかりやすいです。ポイントとなるのは、変数宣言の変数名に「*」をつけることでポインタを定義でき、通常の変数に「&」をつけるとアドレスを参照、ポインタに「*」をつけるとそのポインタにある情報が参照できるということです。
別項の文字列も「char *p = "I love JAPAN."」とすることで、文字列を格納することができます。しかしこれは、「I love JAPAN.」という定数になるため、変更ができません。
char s[] = "I love JAPAN.";
配列sには、「I love JAPAN.」と終端の「\0」の長さがメモリに確保され、初期値として値が設定されますので、文字の変更が可能になります。