sizeof ( 型名 ) 引数は、「型名」あるいは、「型」を表す表現 その型が、幾つのセルをしめるかを byte 数でしめしてくれる 前回は char 型変数 <-> メモリモデルの一つセル & をつける <-> セルのアドレスを取り出す & をつけたものに * をつける <-> セルそのものをさす ※ & をつけたものは、「値」なので、計算に利用したり、 関数に引数として渡す事や、関数の値として返す事ができる 今回は、int 型に関しても ( int が 4 つ分のセルを占有する以外は、 ) char 型と同じ 同様に、 double 型 / 構造体なども同じように説明できる == ポインター値 アドレスと型の二つの情報を持つ値 アドレス : メモリモデルにおける、番地(address)同じもの 型 : それがしめるセルサイズと、それが表す情報の操作方法 -> char, int, double, struct { int x; int y; }, etc.. と同じ !! ポインター値は、アドレス値 *だけ* をもっているわけではない !! アドレス値は、整数値として表示できるが、型情報は表示できない == 関数の引数 (など、変数) は、 スタックにとられている 「スタック」=「棚」 上に、どんどん、物を載せる事ができて、 必要ならば、上にあるものを下して使う使う事ができる ------------------ スタック (最初は空っぽ) +-------+ | 1 | <- 一つ物を載せた (push) +-------+ ------------------ スタック (内容が 1 つのもの) +-------+ | 4 | <- 沢山のっている +-------+ +-------+ | 3 | +-------+ +-------+ | 2 | +-------+ +-------+ | 1 | +-------+ ------------------ とりだすときは、最後にいれたものだけがとりだせる +-------+ | 4 | <- 取り出せるのは、さいごにつんだもの (pop) +-------+ +-------+ | 3 | +-------+ +-------+ | 2 | +-------+ +-------+ | 1 | +-------+ ------------------ fac(int n) { +----------+ n-> | 4 | +----------+ ------------ fac ( n - 1 ) = fac ( 4 - 1 ) = fac ( 3 ) +----------+ n-> | 3 | +----------+ +----------+ | 4 | +----------+ ------------ } main() { fac (4) ------------ } 1. 再帰呼出し メモリモデルで説明ができる 2. 引数が「スタック」とよばれる「メモリ」に保存されている -> printf の秘密につながる