配列を初期化する関数を使いたいです。
//関数
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:配列とポインタを含んだ関数
おかしいかはわかりません。
出来ればどうおかしいかを教えて下さい。
また
for(i=1;i<21;i++){
for(j=1;j<14;j++){
で1から始まってますがあってますか?
出来ればどうおかしいかを教えて下さい。
また
for(i=1;i<21;i++){
for(j=1;j<14;j++){
で1から始まってますがあってますか?
Re:配列とポインタを含んだ関数
http://www9.plala.or.jp/sgwr-t/c/sec11-2.html
こうですかね?
// 宣言
void syokika(int Map[][15]) {
}
// 使用
syokika(Map);
こうですかね?
// 宣言
void syokika(int Map[][15]) {
}
// 使用
syokika(Map);
Re:配列とポインタを含んだ関数
//宣言 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:配列とポインタを含んだ関数
for(i=0;i<21;i++){
for(j=0;j<14;j++){
Map[j]=0;
}
}
じゃないとMap[0][0]とかが初期化できません
確か↓でもできたはず
Map[22][15]={0};
for(j=0;j<14;j++){
Map[j]=0;
}
}
じゃないとMap[0][0]とかが初期化できません
確か↓でもできたはず
Map[22][15]={0};
Re:配列とポインタを含んだ関数
for(i=1;i<21;i++){
for(j=1;j<14;j++){
で大丈夫です。
この関数は、プログラムの途中で初期化しなおすようにしたいです。
for(j=1;j<14;j++){
で大丈夫です。
この関数は、プログラムの途中で初期化しなおすようにしたいです。
Re:配列とポインタを含んだ関数
「初期化」という単語を宣言時のメモリ的な意味での初期化ではなく
「元に戻す」という意味で「初期化」という単語を使われてるのだと思います。
現在の「Map」変数を「MapDefault」とでもして変更を加えない変数にしておいて使う側は
int Map[22][15];
memcpy( Map, MapDefault, sizeof( MapDefault ) );
と処理したら良いでしょう。
「元に戻す」という意味で「初期化」という単語を使われてるのだと思います。
現在の「Map」変数を「MapDefault」とでもして変更を加えない変数にしておいて使う側は
int Map[22][15];
memcpy( Map, MapDefault, sizeof( MapDefault ) );
と処理したら良いでしょう。