配列とポインタ 数理情報システム工学科 担当: 汐月哲夫 2015/10/1 プログラミング方法論 [email protected] 1 配列(array) • 配列=同じ型の連続した並び 2015/10/1 プログラミング方法論 [email protected] 2 配列の宣言 C言語の記述 (sizeof(int)X8)バイトの領域を確保 int a[8]; char b[]={“KUMA”}; 文字列の初期化 (ヌル文字を含めて5文字) a b 2015/10/1 K U M A \0 プログラミング方法論 [email protected] 3 配列へのアクセス C言語の記述 a[2] = 3; 3番目の要素に3を代入 printf(“%s\n”,b) ; 配列bの先頭番地を渡す a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] printf() 2015/10/1 a 3 b K U M A \0 プログラミング方法論 [email protected] 4 配列へのアクセス 個々の要素は基本型として扱う a[2] b[0] int 型 char 型 配列変数名は先頭アドレス b = 配列bの先頭アドレス = b[0] のアドレス 添え字は先頭からのオフセットを表す a[2] = *(a+2) 2015/10/1 プログラミング方法論 [email protected] 5 配列とポインタ int a[6]; a[0] a[1] a[2] a[3] a[4] a[5] *(a) *(a+1) *(a+2) *(a+3) *(a+4) *(a+5) &a[0] &a[1] &a[2] &a[3] &a[4] &a[5] int 型 変数を表す 2015/10/1 (a) (a+1) (a+2) (a+3) (a+4) (a+5) * int 型 変数のアドレスを表す プログラミング方法論 [email protected] 6 ポインタ変数 ポインタ変数 =変数、関数のアドレスを格納する変数 ポインタ変数の宣言 <型名> *<変数名>; アドレスを内容とする変数 例: ptr int *ptr; int a=3; 2015/10/1 ptr = &a; a プログラミング方法論 [email protected] 3 整数を内容とする変数 7 ポインタに関する演算子 *<ポインタ変数名> ポインタ変数名の指す変数 &<変数名> ポインタ変数 ptr に 整数変数 a のアドレスを セットする 変数名のアドレス 例: int *ptr; int a=3; ptr = &a; *ptr = 4; 2015/10/1 ptr a 4 34 ptr の指す変数に 4 を代入する プログラミング方法論 [email protected] 8 ポインタに関する演算子(2) <ポインタ変数>+<整数> <ポインタ変数>ー<整数> <ポインタ変数>++ <ポインタ変数>-- 例: int a[3]; ptr = a; a ptr 4 5 *(ptr+1) = 4; *(ptr+2) = 5; 2015/10/1 プログラミング方法論 [email protected] 9 参照渡しの例2 メインプログラム 呼び出される 関数プログラム #include <stdio.h> void set(int *, int *); int main( void ) { int a, b; set(&a, &b); printf(“%d %d\n”,a,b); return 0; } 2015/10/1 void set(int *aptr, int *bptr) { *aptr = 3; *bptr = 4; } プログラミング方法論 [email protected] 10 関数外の変数の内容を変更する(1) メインプログラム の管理するメモリ a b 呼び出される 関数プログラム void set(int *aptr, int *bptr) { *aptr = 3; *bptr = 4; } 変数のアドレスが ポインタ変数に渡される 2015/10/1 プログラミング方法論 [email protected] 11 関数外の変数の内容を変更する(2) メインプログラム の管理するメモリ a b 3 4 呼び出される 関数プログラム void set(int *aptr, int *bptr) { *aptr = 3; *bptr = 4; } ポインタ変数が指す変数に 値を代入する 2015/10/1 プログラミング方法論 [email protected] 12
© Copyright 2024 ExpyDoc