ページ 11

配列とポインタを含んだ関数

Posted: 2010年11月14日(日) 11:43
by Ultimate
配列を初期化する関数を使いたいです。

//関数
void syokika(int *Map[22][15]){
int i,j;
for(i=1;i<21;i++){
for(j=1;j<14;j++){
Map[j]=0;
}
}
}

//略

//宣言
int Map[22][15]={
{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
};

//略

//関数を使う
syokika(&Map[][]);

こんな感じですが、どこがおかしいのでしょうか?

Re:配列とポインタを含んだ関数

Posted: 2010年11月14日(日) 12:06
by もみじ
おかしいかはわかりません。
出来ればどうおかしいかを教えて下さい。

また
for(i=1;i<21;i++){
for(j=1;j<14;j++){
で1から始まってますがあってますか?

Re:配列とポインタを含んだ関数

Posted: 2010年11月14日(日) 12:18
by ookami
http://www9.plala.or.jp/sgwr-t/c/sec11-2.html

こうですかね?

// 宣言
void syokika(int Map[][15]) {
}

// 使用
syokika(Map);

Re:配列とポインタを含んだ関数

Posted: 2010年11月14日(日) 12:43
by wing
//宣言 
int Map[22][15]={ 
        {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, 
        {2,0,0,0,0,0,0,0,0,0,0,0,0,0,2}, 
        {2,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
        ............
で、すでに0で初期化しているような気がするんですが。

Re:配列とポインタを含んだ関数

Posted: 2010年11月14日(日) 13:02
by kokuoutyou
for(i=0;i<21;i++){
for(j=0;j<14;j++){
Map[j]=0;
}
}
じゃないとMap[0][0]とかが初期化できません
確か↓でもできたはず
Map[22][15]={0};

Re:配列とポインタを含んだ関数

Posted: 2010年11月14日(日) 13:43
by Ultimate
for(i=1;i<21;i++){
for(j=1;j<14;j++){

で大丈夫です。

この関数は、プログラムの途中で初期化しなおすようにしたいです。

Re:配列とポインタを含んだ関数

Posted: 2010年11月14日(日) 13:56
by ookami
あれ、No.65126はハズレでしたか?

Re:配列とポインタを含んだ関数

Posted: 2010年11月14日(日) 14:20
by Ultimate
すみません、うまくいきませんでした。
ただ、使わないでなんとかなったので大丈夫です。
ありがとうございました。

Re:配列とポインタを含んだ関数

Posted: 2010年11月14日(日) 14:22
by にゃこ
「初期化」という単語を宣言時のメモリ的な意味での初期化ではなく
「元に戻す」という意味で「初期化」という単語を使われてるのだと思います。

現在の「Map」変数を「MapDefault」とでもして変更を加えない変数にしておいて使う側は
int Map[22][15];
memcpy( Map, MapDefault, sizeof( MapDefault ) );

と処理したら良いでしょう。