演習時間: 40 分
演習 1 (個人PC、20分): この演習では「ポインタ渡し」の活用例として「スワップ(swap)関数」を作ってみましょう。
スワップ関数は二つ以上の変数の値を入れ替えるための関数で、「ポインタ渡し」の活用例として良く挙げられます。
例えば int a と int b という int 型の変数にそれぞれ 1 と 2 が入っている時、このスワップ関数を呼び出すと中身が入れ替わって a が 2、b が 1 となります。
さて「ポインタ渡し」を学んでいない C 言語初学者にスワップ関数を作ってもらうと「値渡し」を使って必ず次のようなコードを書きますが、テキストに書いてあるように「値渡し」では main 関数の変数 a、b の値を変えることが出来ません。
#include <stdio.h> void swap( int a, int b ) { int c = b; b = a; a = c; } int main() { int a = 1; int b = 2; printf("a = %d, b = %d\n", a, b ); swap( a, b ); printf("a = %d, b = %d\n", a, b ); return 0; }
ではこの失敗例を修正しながら「ポインタ渡し」の演習を行なって行きましょう。
上の「値渡し」を使ったコードを実行し、「値渡し」の方法では main 関数の a と b の値が入れ替わらないことを確認して下さい。
スワップ関数の 2 つの引数定義を「ポインタ渡し」の方法に変更して下さい。引数名も a を pa、b を pb に変えて下さい。
スワップ関数の中身を間接演算子 * を使う様に書き換えて下さい。
※ 変数 c は int 型変数のままにしておいて下さい。
main 関数のスワップ関数の呼び出し部分で、アドレス演算子 & を使って a と b のアドレスを関数に渡すように書き換えて下さい。
スワップ関数が正常に動作することを確認して下さい。
ドキュメントファイルに「ソースコード」と「実行結果」をコピーして保存してください。
演習 2 (個人PC、20分): 「配列渡し」を使って関数の中で配列の各要素の中身を操作してみましょう。
main 関数を作る前に以下の仕様で関数を作って下さい。
(1) 関数の戻り値の型は void 型とする。
(2) 関数名は HOGE とする。
(3) int 型のポインタ変数 pa を引数とする。
※ もちろん引数定義として記法 2 又は記法 3 を使っても構いません。
(4) 関数の中で以下のように呼び出し元の配列の各要素を操作する。
4-1. 呼び出し元の 0 番目の要素に 12 をセットする
4-2. 呼び出し元の 1 番目の要素に 34 をセットする。
4-3. 呼び出し元の 2 番目の要素の中身を 2 倍する
HOGE 関数の下から main 関数を始めて下さい。
main 関数の中で int 型の長さ 3 の配列 a を定義して下さい。
a[0] と a[1] に 0 を、a[2] に 2 を代入して下さい。
HOGE 関数を呼び出し、配列 a の中身を書き換えて下さい。
HOGE 関数から main 関数に戻ったら for ループと printf を使って a[0] 〜 a[2] の内容(10進数)を表示して下さい。
ドキュメントファイルに「ソースコード」と「実行結果」をコピーして保存してください。
今年度は省略
今年度は省略