関数とポインタ。 (昨年度)

プログラミング方法論 II
第 6 回(担当:鈴木伸夫)
今日のキーワード:ポインタと関数引数

(重要)C 言語は一度に「ひとつの数字」しか伝えることができない。


関数の出力は「1 つの値、または 0(void)」
名前空間が違うので関数の中と外では同じ値を使えない。

整数 a と整数 b を入力で与えると、それぞれの値を交換する swap()関数を作成す
るとき、 void swap(int a, int b);ではうまくいかない。


引数で渡す変数の値を変化させたい場合は、引数に変数のポインタを使用する。

void swap(int *a, int *b);

呼出側では swap(&a,&b)のようにアドレスを渡して関数を呼び出す。
配列名は既にアドレスを意味しているため、自動的にポインタと同じ扱いになる。

関数の引数の宣言では、以下の 3 つは全て同じになる

int a[]

int *a

int a[10]
//この場合、10 は無視される
swap()関数を使用した例
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(){
int a=5;
int b=3;
swap(&a,&b);
return 0;
}
今日のチェック問題(プログラミング方法論 II
学籍番号
第 6 回)授業終了時に提出
名前
1. 分と秒を引数として与えると、一秒後の値を分と秒にセットする関数を作成
せよ。
2. 二つの整数 a,b を引数として与えると、a>=b の場合はそのまま、a<b の場合
は a と b の値を入れ替える関数を作成せよ。
3. この講義に期待すること、本日の感想などを自由に述べてください。
レポート課題(プログラミング方法論 II
学籍番号
第 6 回)第 7 回授業開始時までに提出
名前
1. 時間と分と秒を与えると、一秒後の値を時間と分と秒にセットする関数を作
成せよ。
2. 3 つの整数 a,b,c を渡すと、a に一番大きな値、b に次に大きな値、c に一番小
さい値を代入して入れ替える関数を作成せよ。
3. 配列 a[ ] と配列の大きさ num、倍数 mlt を引数として渡すと、配列 a[ ]の全
ての値を mlt 倍して a[ ] にセットする関数を作成せよ。