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
- 作者: MMGames
- 出版社/メーカー: 秀和システム
- 発売日: 2011/06/24
- メディア: 単行本
- 購入: 3人 クリック: 600回
- この商品を含むブログ (1件) を見る