[← 演習のページへ戻る]
サンプルプログラム 2 の内容整数を SIZE 個読み込み,それらを順に配列 a へ格納する.その後に別の配列 b へ a の内容をコピーする. なお,SIZE はマクロとして定義する. 1: #include <stdio.h> 2: 3: #define SIZE 5 4: 5: int main(void){ 6: int a[SIZE], b[SIZE]; 7: int i; 8: 9: printf("%d 個の整数を入力してください\n", SIZE); 10: for ( i = 0; i < SIZE; i++ ){ 11: scanf("%d", &a[i]); 12: } 13: 14: printf("配列 a を配列 b へコピーします.\n"); 15: 16: for ( i = 0; i < SIZE; i++ ){ 17: b[i] = a[i]; 18: } 19: 20: printf(" a b\n"); 21: printf("-------\n"); 22: for ( i = 0; i < SIZE; i++ ){ 23: printf("%3d %3d\n", a[i], b[i]); 24: } 25: 26: return 0; 27: } 3 行目: #define SIZE 51: #include <stdio.h> 2: 3: #define SIZE 5 4: 5: int main(void){既に説明しましたが,配列の大きさは定数でなければなりません. ここではこの値を 5 にしたいのですが,プログラムの中でもこの配列の大きさ(=5)が何度か登場することになります. そこであらかじめ,配列の大きさに相当する数を SIZE という名前で参照できるように定義しておきます. それが 3 行目の #define SIZE 5です. これをマクロといいます. マクロを使うと,後になって「配列の大きさを 5 から 10 に変更したい」という場合でも #define SIZE 5 ↓ #define SIZE 10という具合いに一箇所だけ変更すればよいことになり便利です. これだけで,それ以降のすべての SIZE という部分が 5 から 10 に置き換わります. 改めて,マクロの使い方ですが #define マクロ名 定義したい内容と書きます. 途中に = は書きませんし,行の終わりにセミコロン(;)も書きません. あくまでもマクロは,定義したい内容の「別名」なだけであり,変数ではないのです. 9-12 行目: printf("...."); for ( i = 0; i < SIZE; i++ ){ ... }8: 9: printf("%d 個の整数を入力してください\n", SIZE); 10: for ( i = 0; i < SIZE; i++ ){ 11: scanf("%d", &a[i]); 12: } 13:ここでは for 文を使って繰り返しながら,整数を読み込み,配列 a へ格納しています. 特別なことではないのですが,ここでも配列の大きさに相当する値の部分はマクロである SIZE を指定します. このサンプルプログラムの場合は SIZE を 5 と定義していますので,SIZE の代わりに直接 5 と書いても動作は変わりません. しかし,それではせっかくマクロを定義したのに台無しになります. 繰り返しになりますが,対応する箇所を SIZE という表記に統一しておくことで, 後から配列の大きさを変えたくなった場合に一発で対処できる(#define SIZE の部分を変えるだけで済む)というメリットがあります. さらに,マクロに意味のある名前を付けておくことで,単に 5 といった数字と異なり,何を意味する値なのかが明確になります. これは意外と大事なところであり,他人が見ても理解できる,分かりやすいプログラムを書けるかどうかのポイントの一つです. 16-18 行目: for ( i = 0; i < SIZE; i++ ){ b[i] = a[i]; }14: printf("配列 a を配列 b へコピーします.\n"); 15: 16: for ( i = 0; i < SIZE; i++ ){ 17: b[i] = a[i]; 18: } 19:このサンプルプログラムには,もう一つ大事なところがあります. それは,配列のコピーです. 配列は,複数の変数が集まったものなのですが,すべての変数をまとめてコピー(代入)することができません. つまり, a = b;だけで済ませたいのですが,残念ながらこれではうまくいきません. ※詳しくは「ポインタ」という概念を扱う回に説明します. そこで地道ではありますが,確実なのは一つ一つコピーしてあげることでして, for 文を使って順番に a[i] を b[i] に代入してあげています. |