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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ultimate

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

#1

投稿記事 by Ultimate » 14年前

配列を初期化する関数を使いたいです。

//関数
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:配列とポインタを含んだ関数

#2

投稿記事 by もみじ » 14年前

おかしいかはわかりません。
出来ればどうおかしいかを教えて下さい。

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

ookami

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

#3

投稿記事 by ookami » 14年前

http://www9.plala.or.jp/sgwr-t/c/sec11-2.html

こうですかね?

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

// 使用
syokika(Map);

wing

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

#4

投稿記事 by wing » 14年前

//宣言 
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で初期化しているような気がするんですが。

kokuoutyou

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

#5

投稿記事 by kokuoutyou » 14年前

for(i=0;i<21;i++){
for(j=0;j<14;j++){
Map[j]=0;
}
}
じゃないとMap[0][0]とかが初期化できません
確か↓でもできたはず
Map[22][15]={0};

Ultimate

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

#6

投稿記事 by Ultimate » 14年前

for(i=1;i<21;i++){
for(j=1;j<14;j++){

で大丈夫です。

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

ookami

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

#7

投稿記事 by ookami » 14年前

あれ、No.65126はハズレでしたか?

Ultimate

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

#8

投稿記事 by Ultimate » 14年前

すみません、うまくいきませんでした。
ただ、使わないでなんとかなったので大丈夫です。
ありがとうございました。

にゃこ

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

#9

投稿記事 by にゃこ » 14年前

「初期化」という単語を宣言時のメモリ的な意味での初期化ではなく
「元に戻す」という意味で「初期化」という単語を使われてるのだと思います。

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る