C言語関係掲示板

過去ログ

No.1170 動的に2次元配列を作った際に警告が出る

[戻る] [ホームページ]
No.15248

2次元配列作成について
投稿者---array(2004/07/05 20:05:44)


動的に2次元配列を作成したいと思い、以下のように配列を作る関数を用意しました。

【main.c】
int main()
{
      ...
      int **Array;
      ...

      Create(**Array, 他の変数);
 
      ...
      Array を使った処理
      ...
}

【create.c】
int Create(int **Array, 他の変数)
{
      /* 2次元配列を作成 */
      Array = (int **)calloc(size, sizeof(int *));
      ...
      
      /* 配列の初期化等の処理 */
      ...
}

【header.h】
int Create(int **Array, 他の変数);
...

このようにすると、警告が出て
『警告:引数1個の'Create'を渡しますにより、キャストなしで整数からポインタを作りました』
と表示されます。  

main関数内にCreate関数の処理をしてもいいのですが、プログラムが少し見にくくなるので何とか分けたいと考えております。

どのようにすれば警告が出ないかお分かりの方がいらっしゃいましたらアドバイスを宜しくお願いいたします。    




No.15249

Re:2次元配列作成について
投稿者---REE(2004/07/05 20:21:28)


>int **Array;

>Create(**Array, 他の変数);

これでは、関数にint型を渡すことになります。
以下の様に変更すべきです。

Create(&Array, 他の変数);

【create.c】
int Create(int ***Array, 他の変数)
{
/* 2次元配列を作成 */
*Array = (int **)calloc(size, sizeof(int *));
...



No.15250

ありがとうございました
投稿者---array(2004/07/05 21:18:08)


REEさん

無事配列を作ることができました。
この後のプログラムは順調に作っていけそうです。
本当にありがとうございました。




No.15279

Re:2次元配列作成について
投稿者---array(2004/07/06 14:29:16)


さらに質問させてください。

Create関数からさらにFunc関数にArrayを渡して処理をするときは
以下のようにすればよいのでしょうか?

【main.c】
int main()
{
     Create(&Array, ...);
     ...
}

【create.c】
int Create(int ***Array, ...)
{
    ...
    Func(&(*Array), ...);
    ...
}

【func.c】
int Func(int ***Array, ...)
{
    for(i=0;...)
      for(j=0;...)
           (*Array)[i][j] = ...;
}
 


No.15281

Re:2次元配列作成について
投稿者---ニタチ(2004/07/06 14:48:51)


>Create関数からさらにFunc関数にArrayを渡して処理をするときは
>以下のようにすればよいのでしょうか?

 いいと思います。

> Func(&(*Array), ...);
 
 ここは、&(*Array) == &Array[0] == Array なので、
 Func(Array, ...); でいいです。





No.15306

ありがとうございます
投稿者---array(2004/07/06 23:32:05)


<pre>

>Func(&(*Array), ...);

>ここは、&(*Array) == &Array[0] == Array なので、
>Func(Array, ...); でいいです。

ニタチさん、ありがとうございます。

なるほどー。上のようにも書けるのですね。勉強になります。

</pre>