;; This buffer is for notes you don't want to save, and for Lisp evaluation. ;; If you want to create a file, visit that file with C-x C-f, ;; then enter the text in that file's own buffer. typedef struct int x; int y; } Point2D; main() { Point2D p1; // p1 == Point2D p2; // p2 == int c; p1 = p2; // p1.x <== p2.x // p1.y <== p2.y } メモリモデル +-------+ | | <- アドレス(番地)が振られている +-------+ 一つのセルには 1 byte(=8 bit)の情報が記録可 | | +-------+ | | +-------+ | | +-------+ | | +-------+ 変数 c (int 型)は、サイズが 4 byte なので、 4 つのセルを占有する # char 型の場合は、size が 1 byte なので # 一つのセルに入る Point2D p1; p1, p1.x+-------+ | | <---+ +-------+ | | | | +-------+ + int (サイズ 4) <=> p1.x | | | +-------+ | | | <---+ p1.y +-------+ | | <---+ +-------+ | | | | +-------+ + int (サイズ 4) <=> p1.y | | | +-------+ | | | <---+ +-------+ == main() { Rational a, b, c; a = b; c = multiply_Rational ( a, b ); // c = a * b; => C 言語ではダメ / C++ という言語では可能 == void func ( int y ) { // y +----+ // | 1 | <- x の中身が copy される // +----+ s_print_int ( y ); // y の値 ( ここでは 1 ) が表示される y = y + 10; // y の値が変更される // y +----+ // | 11 | <- y の元の値 1 と 10 和 // +----+ s_print_int ( y ); // y の値 ( ここでは 11 ) が表示される } main() { int x; // x +----+ // | | // +----+ x = 1; // x +----+ // | 1 | // +----+ func ( x ); // 関数の第一引数に x という式の値が渡される // y +----+ // | 1 | <- x の中身が copy される // +----+ // 関数を呼び出した後でも x の値は不変 } == void func ( int *px ) { // px+----+ // | &x | <- x のポインター値が入る // |1020| // +----+ s_print_int ( *px ); // *px == *(&x) == x // x +----+ // | 1 | // +----+ // => x の値 1 が表示 *px = *px + 10; // *px == *(&x) == x // x = x + 10 // x +----+ // | 11 | <- x の元の値 1 と 10 和 // +----+ s_print_int ( *px ); // *px == x の値 ( ここでは 11 ) が表示される } main() { int x; // x +----+ // | | // +----+ x = 1; // x +----+ 1020 // | 1 | // +----+ pfunc ( &x ); // &x という式の値 (x へのポインター値) // px+----+ // | &x | <- x のポインター値が入る // |1020| // +----+ // 関数を呼び出した後に x の値は 11 に変化 // x +----+ 1020 // | 11 | // +----+ } == int func ( int y ) { return y + 10; } main() { int x = 2; x = func( x ); // x <- 12 } == 課題 2 のヒント sum には、array[0] 〜 array[size-1] の和を求めたい だから sum = array[0] + array[1] + .. + array[size-1] となる。 しかし、C 言語では .. は使えない.. とりあえず、 sum = 0 + array[0] + array[1] + .. + array[size-1] と考えれば、 sum = 0; sum = sum + array[0]; sum = sum + array[1]; .. sum = sum + array[size-1]; となる。 更に、 sum = 0; i = 0; sum = sum + array[i]; i++; /* i = i + 1 */ sum = sum + array[i]; i++; .. とすれば、同じ事の繰返しになる.. あとは、i が 0 から size-1 までになる事を考えると.. sum = 0; for ( i = 0; i < size; i++ ) { /* ここに... 何をかけば ?? */ }