Shammer's Philosophy

My private adversaria

配列とポインタその1

実際の開発現場ではほとんど利用されていないようだが、入門書などでよく利用されているscanfという巻数がある。
これは、引数に値を格納する変数のアドレスを指定する。つまり、

int value = 0;
scanf("%d", &value);

というような形で、変数の頭に&をつけて引数を渡す。
しかし、文字列情報を読み込む際には、

char[20] value;
scanf("%s", value);

としてやるだけでよい。&valueとする必要がない。
これは、ポインタと配列の関係によるものだが、Cの配列名はその配列の先頭アドレスを意味している、ということに起因している。
つまり、char[20] value と宣言すると、char 20個分のメモリを確保し、
char[0]のアドレスをvalueとみなしている、ということだ。

まとめてみると、

  • 配列名というのはポインタである
  • 指しているアドレスはその配列の先頭要素である

ということになる。。。ポインタの勉強をするときにこの辺をもっと細かく突っ込んでみたい。