• 締切済み

ポインタのキャスト方法

こんにちは。 C言語でポインタキャストしているところがどうしてもうまくいきません。 以下のような要素数10個の型配列を指すポインタを キャストしたいのですがこれだと警告文がでてしまうので きちんとキャストしたいのですが、 どうしてもうまくいきませんでした。。。 1 short int *ibuf; 2 short int (*ibuf_tmp)[10]; 3 ibuf_tmp=ibuf; ※←ここです 宜しくお願いします。

みんなの回答

  • richardo
  • ベストアンサー率20% (11/53)
回答No.5

 私も人に教えられる程知っている訳じゃ無いけれど、 次のようにしてコンパイルしたらエラーにならなかったから あなたのやりたい事はこれじゃないかな。 short int *ibuf; short int *ibuf_tmp[10]; ibuf_tmp[0]= ibuf ;

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

C の中で閉じた話ならともかく, 「FORTRAN とやり取りしよう」というのであれば「FORTRAN でどのように引数を渡すのか」が分からないとお話にならないですね. C の関数を呼び出すときに (配列に限らず) 引数がどうなるのか, お使いの FORTRAN 処理系の資料を漁って頑張って調べてください. その結果が出てくれば考えようはあります. ちなみに ibuf_tmp[0] = ibuf は動かないような気がします>#3.

  • precog
  • ベストアンサー率22% (966/4314)
回答No.3

キャストされてませんけど、、、、 >3 ibuf_tmp=ibuf; ※←ここです どこにキャストがあるんでしょうか? わたしも何がやりたいのかさっぱりわかりません。なんでキャストする必要があるの? そのまま素直に代入すれば良いと思うけど。 ibuf_tmp[0] = ibuf でいいのでは?

hor
質問者

補足

>キャストされてませんけど、、、、 ですね。。。補足追加しました。。。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「どうしてもうまくいきませんでした」ということなので, 「どのようにしてみたのか」を全部挙げてください. そもそも「なんでこんなことをしたいのか」に興味がありますが.

hor
質問者

補足

他の回答者さんからもご指摘ありましたようにこのキャストはよくないんですね。長くなりますがやりたいことを以下に記述します。 今、f2cを使ってできたソースをベースに修正を加えているところです。元々のソースは以下です。 /* Subroutine */ int cal_freq__(shortint *ibuf, shortint *nnn, shortint * nzero_cross__) { /* System generated locals */ integer i__1; /* Local variables */ static integer j; static shortint ib, ic; static integer isgna, isgnb; /* Parameter adjustments */ --ibuf; /* Function Body */ *nzero_cross__ = 0; ic = 15; isgna = 1; if (ibuf[1] < 0) { isgna = -1; }  ~~~~~以下略~~~~~ 上記のibufをセグメントエラーで落ちないようにしたいというのが本来やりたかったことです。short int (*ibuf_tmp)[10]; というポインタにいれてしまえば警告でても動きました。 呼び出し側はフォートランです。 ---呼び出し部分は↓です------------------------ integer*2 ibuf4(1000) call cal_freq(ibuf4,nc_freq,ntcon) ----------------------------------------------- shortint *ibuf は呼び出し側では配列です。 再度質問させてください。 そもそもの引数に int cal_freq__(shortint *ibuf, shortint *nnn, shortint * nzero_cross__) と、shortint *ibufになっていることが問題あるということになるのでしょうか?

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

ibufの型はshort *でibuf_tmpの型は(short *)[10]です。 そのまま入れたら入る訳が無いとは思いませんか? キャストで無理矢理入れるのもやめましょう。異常動作の原因になります。

hor
質問者

補足

どうもやり方にムリがあるようですね。 ご指摘ありがとうございます。

関連するQ&A

専門家に質問してみよう