これは、非常に簡単で、次のようにする。たとえば、呼び出し元でhoge[100]という 配列を関数kansu()に送りたいのならば、
kansu(hoge);として、コール (call) すれば良い。一方、呼び出された関数側では、それを配列名 fugaとして使いたいならば、
戻り値の型 kansu(fuga[]){ 処理内容 }とする。これは、例のプログラムをよく見て欲しい。このようになっているはずである。
2次元以上の配列の場合も同じようになる。ただし、呼び出された側では、配列のサイズ が必要となる。たとえば、呼び出し元で、
int hoge[100], fuga[200][300], foo[400][500][600]; kansu(hoge, fuga, foo);とする。そうして、呼び出された関数側では、それを配列名a,b,cとして使いたいならば、
戻り値の型 kansu(a[], b[][300], c[][500][600]){ 処理内容 }とする。要するに呼び出された関数側では、配列のサイズの左端を書かなくても良いので ある。書いても良いが、一般的には書かない習慣となっている。書かない方が、間違える 確率が減るからだろう。
#include <stdio.h> int diff_ave(int n, int data[]); /*==============================================================*/ /* main function */ /*==============================================================*/ int main(void){ int seiseki[10], average, i; char temp; for(i=0; i<10; i++){ printf("%d番の成績 = ", i); scanf("%d%c",&seiseki[i], &temp); } average=diff_ave(10, seiseki); /* 関数呼び出し */ printf("平均点 = %d\n", average); printf("平均点との差\n"); for(i=0; i<10; i++){ printf("%d番 = %d\n", i, seiseki[i]); } return 0; } /*==============================================================*/ /* 平気値とその差の計算 */ /*==============================================================*/ int diff_ave(int n, int data[]){ int i, sum, ave; sum=0; /* 初期化 */ for(i=0; i<n; i++){ /* 点数の合計の計算 */ sum = sum + data[i]; } ave = sum/n; /* 平均値の計算 */ for(i=0; i<n; i++){ /* 平均値との差の計算 */ data[i] = data[i] - ave; } return ave; }