1
一次元配列を渡す
1.1
学習のポイント
配列データを関数に渡す方法を学びます。1.2
一次元配列を渡す
配列データは、call by referenceを用いた引数渡しで行います。 つまり、配列の全データを関数に渡すのではなく、配列の先頭アドレスだけを渡し、後 は関数側でポインタを用いて各配列要素を参照するという方法を取るのです。 たとえば、 int a[100]; という配列を関数に渡すには、 func(a); void func(int b[]) { ... } とします。配列名のaは配列の先頭アドレスを示しますから、これは実引数にして渡しま す。仮引数bは配列の実体を受けるものではありませんから、int b[ ];の様にポインタ として宣言し、[ ]内には値を書きません。なお、int b[ ];とする代わりにint *b;とし ても全く同じです。 関数側では、b[0]からb[99]とすることで呼び出し側の配列a[0]からa[99]を参照する ことができます。 「C言語」(河西朝雄著 ナツメ社)110頁 11.3
例題
25
一次元配列a[ ]の各要素の合計を求める関数isum()を作りなさい。 /* reidai25.c 一次元配列a[]の各要素の合計を求める関数isum()を作りなさい。 */ #include <stdio.h> int isum(int b[]) { int s,i; s = i = 0; while(b[i] != -999){ s = s + b[i++]; } return s; } int main() {static int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -999};
printf("gokei = %d\n", isum(a));
return 0; }
1.4
練習問題
25
配列a[ ]の内容をbにコピーする関数arraycopy()を作りなさい。 /* rensyu25.c 配列a[ ]の内容をbにコピーする関数arraycopy()を作りなさい。 */ #include <stdio.h>void arraycopy(int a[], int b[]) { int i = 0; while(a[i] != -999){ b[i] = a[i]; i++; } b[i] = -999; } int main() {
static int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -999}; int b[100]; int i = 0; arraycopy(a, b); while(b[i] != -999){ printf("%d ", b[i++]); } return 0; } 3