<配列の仮引数>

 

 配列やポインタの引数を関数側で受け取る際、<例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)はエラー

 

 関数が受け取るアドレスだけでは,コンパイラは行の要素数を判断できないので,行の要素数は明示しなくてはなりません。

 

 

戻る