• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2次元配列からダブルポインタへの合わせ方)

2次元配列からダブルポインタへの合わせ方

このQ&Aのポイント
  • 固定要素数の行列の処理ですが、subでセグメンテーション違反が発生しています。
  • 呼び出し側で行列の先頭のアドレスを明示しているつもりですが、どこが間違っているのでしょうか。
  • typedefとsubのIFを合わせなければならず、合わせ方が分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.5

別物なのでそのままでは合わせようがないです。どうしてもというなら const double *m[] = {mat[0], mat[1], mat[2]}; としたものを sub(m); で渡すしかないんじゃないか。

aneja
質問者

お礼

ご回答ありがとうございます。 Illegal initialization というコンパイルエラー(Borland)が出ましたが、typedefしたものをラップすればよいという理解でよいですか。動くようにがんばってみます。

すると、全ての回答が全文表示されます。

その他の回答 (13)

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

>matの宣言はポインタのポインタでなく、*を1つでよいのでは? さすがに、それはまずいでしょう。 そういうソースコードを書いて、ご自分で試してみましたか? >以下、質問者さんへ いわゆる2次元配列(各要素が配列であるような配列)と ダブルポインターとは似て非なるものでありまして、 今回の例だと (*mat)[3] という具合に、sub関数に渡す引数を 「要素数3の配列へのポインター」とする必要があるかもしれませんし、 もっといい方法があるのかもしれません。

aneja
質問者

お礼

ご回答ありがとうございます。 配列とポインタは本当は違うものだという解説は、以前どこかで読んだことがあって、その時は「なるほどな~」と思ったものですが、やはり完全に理解できていなかったようです。 本当は、引数の「double**」の他にも引数があって、当然ですが行と列の要素数も引数にあります。この質問では、要素数固定として簡略化したんですが、ダブルポインタの箇所そのものを変更する必要があるかも、ということですね。

すると、全ての回答が全文表示されます。
  • noyuo
  • ベストアンサー率39% (33/84)
回答No.2

void sub( const double** mat ) matの宣言はポインタのポインタでなく、*を1つでよいのでは?

aneja
質問者

お礼

ご回答ありがとうございます。 *を1つだと、たぶん意味が違います…。

すると、全ての回答が全文表示されます。
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

>  sub( &mat[0][0] ); ここで警告出てませんか?

aneja
質問者

お礼

ご回答ありがとうございます。 以下のワーニングがでています(Borland)。 Warning W8075 main.c 30: Suspicious pointer conversion in function main gccでも同じような意味のものが出ていたと思います。

すると、全ての回答が全文表示されます。

関連するQ&A