過去のログを検索しても引っかからなかったので質問します。
配列の引数についてなのですが
func( (*p)[2] )とfunc( p[/url][2] )が同じ扱いになることを本を呼んで学びました.( 最外周の添字は書いても無視され, ポインタの扱いになる. ex: func(*p) func(p[/url]) )しかし, なぜ, 前者が要素を2個もつint配列へのポインタの扱いになっているのは何故なのでしょうか?つまり, 最外周の添字が無視されてポインタの扱いになるのなら. func( p[/url][2] )とfunc( *p[2] ) が同じなんじゃないんですか??
また, func( p[/url][/url] )やfunc( p[2][/url] )はどういった扱いになるのでしょうか???func( **p )と同じになるのでしょうか???
いったいどれがどれと同じ扱いになるのか教えてください。
#include <stdio.h> //void my_dice(int (*d)[7]); void my_dice(int d[/url][/url]); int main(void){ int dice[7][7]; int n, cnt; int x, y; srand(time(NULL)); //乱数の初期化. //配列の初期化. for(x = 0; x < 7; x++) { for(y = 0; y < 7; y++) { dice[y][x] = 0; } } printf("試行回数:"); scanf(" %d", &n); for(cnt = 0; cnt < n; cnt++) { my_dice(dice); } return 0; } void my_dice(int d[/url][/url]) { //void my_dice(int (*d)[7]) { int x, y; x = rand() % 6 + 1; y = rand() % 6 + 1; d[y][x] += 1;//←ここです return; }あと, 上記の様なソースでは矢印で示している部分において"invalid use of array with unspecified bounds"とエラーが返ってきます。(コメントアウトした部分でコンパイルするとうまくいきます)これは, 要素数が明確でないのが原因なのでしょうが, コメントアウトした部分でも不明確な部分(最外周の部分です)があるのになぜコンパイルできてしまうのでしょうか???
ご協力お願いします。