|
>void add(int (*a)[4]); で、呼び出し側が、int num[3][4]; add(num); だとすれば、
>関数 add の中で、a の型は、int (*)[4]。だから、*a の型は、int [4]。a の値は、
>num[0] へのポインタの値ですから、*a の値は num[0][0] へのポインタの値です。
>ポインタに [0] をつけた (*a)[0] はもうポインタではありませんから、
>(*a)[0] はどこも指しません。(*a)[0] の型は int です。
>(*a)[0], (*a)[1], (*a)[2] は、num[0][0], num[0][1], num[0][2] となります。
(*a)[0], (*a)[1], (*a)[2] は、num[0][0], num[1][0], num[2][0] となりのでは(違う?)
よーく考えてみたんですが,
void add(int *a);
int num[2][3];
add(num);
だと,
a側は,num[1]やnum[2]とかのアドレスがどこにあるのか知らないから,a[2][1]とか出来ないってことですよね?
a[4]とかとしてからさす事は出来ますけど。
だから,aは配列にしてnum[0],num[1],num[2]のアドレスを(*a)[0],(*a)[1],(*a)[2]に渡してるってことですよね?
使いやすいように。
|