woshidan's loose leaf

ぼんやり勉強しています

C言語の値渡しとアドレスを知る引数、配列のアドレスについて

C言語の関数の引数はすべて値渡しだそう。

関数の中で、引数で渡された構造体などの中身を変更したい時は、&演算子でその変数のアドレスを求めて、そのアドレスを値渡しで渡す。 そして、関数の中でアドレスに対応するメモリの値を書き換えることで、&演算子をつけて渡された変数の中身を書き換える。

C言語を読んでいく時は、配列名が配列の0番目の要素の変数のアドレスを指していることを合わせて読んでいくと理解しやすいかも。

char str[256]:
scanf("%s", str);
// これは上記と同じ
scanf("%s", &str[0]);

また、配列の各要素のアドレスは、配列の型が取るバイト数だけずれた連番になるそうで、array[n]は、配列名のアドレス + 要素番号 * 1要素分の大きさのアドレスがさすメモリから参照できる変数をさしていることになるそうで。

int array[10];
&array        2345678
&array[0]   2345678
&array[1]  2345682
&array[2]  2345686

苦しんで覚えるC言語

苦しんで覚えるC言語