同様な考え方で、配列のデータを関数に受け渡すことも可能です。上記のように、呼び出し側の関数内では、配列の先頭アドレスを実引数として渡し、受け側関数の仮引数は、array[ ] のように添字を除いた形で宣言します。これにより、受け側関数内で、その配列の内容を参照することができるようになります。もちろん、main() 関数内の配列 data[ ] と total() 関数内の配列 array[ ] はメモリ上で同一のデータ列を指しており、array[ ]のデータの修正は、 main() 関数内の data[ ] に直接影響を及ぼすことになります。
#include <stdio.h> #define NUM 5 /* データ数 */ int total(int array[ ]); /* 関数のプロトタイプ宣言 */ int main(void){ int i; int data[NUM]; for(i = 0; i < NUM; i++) data[i] = i+1; /* データ入力 */ printf("%d\n", total(data)); /* データの総和を表示 */ } int total(int array[ ]){ int i; int sum = 0; /* データの総和を入れる変数 */ for(i = 0; i < NUM; i++){ sum = sum + array[i]; } return(sum); /* データの総和を返す */ }