これは、非常に簡単で、次のようにする。たとえば、呼び出し元で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;
}