<配列の仮引数>
配列やポインタの引数を関数側で受け取る際、<例5−2>では仮引数としてポインタを使っていますが、もちろん配列を仮引数とすることもできます。
(例1) int over_no(int *data, int n, int no) { // ポインタで受けて...
...
if
(*(data+i) >= no) { //
ポインタで使う
...
(例2) int over_no(int data[], int n, int no) { // 配列で受けて...
...
if
(data[i] >= no) { //
配列で使う
...
これらは等価なので、
(例3) int over_no(int data[], int n, int no) { // 配列で受けて...
...
if
(*(data+i) >= no) { //
ポインタで使う
あるいは、
(例4) int over_no(int *data, int n, int no) { // ポインタで受けて...
...
if
(data[i] >= no) { //
配列で使う
でも,問題ありません。
二次元配列を仮引数とする時は少し注意が必要です。
(例5) #define N 5
...
int
dt[N][4] = {{1, 2, 3, 4}, {5, 6, 7, 8},...};
...
//
dtを受け取る関数
int
over_avg(int data[][4], int n, int no)
//
int over_avg(int
data[][], int n, int no)はエラー
関数が受け取るアドレスだけでは,コンパイラは行の要素数を判断できないので,行の要素数は明示しなくてはなりません。