ポインタ
Posted: 2007年10月05日(金) 23:57
こんばんわ、大工です。
過去のログを検索しても引っかからなかったので質問します。
配列の引数についてなのですが
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 )と同じになるのでしょうか???
いったいどれがどれと同じ扱いになるのか教えてください。
ご協力お願いします。
過去のログを検索しても引っかからなかったので質問します。
配列の引数についてなのですが
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"とエラーが返ってきます。(コメントアウトした部分でコンパイルするとうまくいきます)これは, 要素数が明確でないのが原因なのでしょうが, コメントアウトした部分でも不明確な部分(最外周の部分です)があるのになぜコンパイルできてしまうのでしょうか???ご協力お願いします。