第11週スライド

11回目
ポインタと配列
136
ポインタと配列
a[5]:
a[0], a[1], …, a[4]
添え字で要素(アドレス)を
指定する。
ポインタを使った要素
指定方法はないか?
a[0]
a[1]
a[2]
a[3]
a[4]
ptr
ptr+1
ptr+2
int *ptr;
あるいは ptr = &a[0])
によって p に x の先頭アドレス
をセットできる。
ptr++ とは?
例題 8-5
ptr = a (
137
ポインタと文字列
文字列は配列として処理される。
char str[10];
scanf(“%s”, str);
文字列の読み込み
例題 8-6(1), 8-6(2)
char s[25] = {“Tokyo, Nagoya, Osaka”};
s[0]
s[1]
s[2]
T
o
k
138
1
ポインタ配列
例題 8-6(1)で char *s[3]とすると
どうなるか?
char *s[3] = {“Tokyo”, “Nagoya”, “Osaka”};
Tokyo
Nagoya
Osaka
例題8-6(1)を改造してこのような印字と
なるようにする。
139
ポインタと引数
実引数としてアドレスを渡し、仮引数でこれを受け取る。
メイン関数で三つの整数を与え、関数sortで大きさの順
に並べ替え、結果をメイン関数で表示するプログラムを
作成しなさい。
実引数 sort( &x, &y, &z);
仮引数 sort(int *a, int *b, int *c)
関数のところで学習した「参照呼び出し」に相当する。
140
参照呼び出しによる方法(再掲)
実引数はアドレス変数
s = func1(&x, &y);
int func1(int *p, int *q); 仮引数がポインタ変数である例
関数の中で計算され、 *p, *qに代入される値は
結局変数x, y に代入される。
関数内での計算結果を複数個呼び出した関数に
戻すことができる。
141
2
ポインタの演習問題
演習問題1: 生まれた年を西暦で入力した場合、干支が
表示されるようにしなさい。
さる、とり、いぬ、い、ね、うし、とら、う、たつ、み、うま
ひつじ の順で生まれた年を 12で割った余りがこの干支
に対応している。
p.152
練習問題 5
142
3