• ベストアンサー

C言語とfortranでのデータの受け渡しについて

はじめましてc_f_gaussと申します。 現在fortranで動的に配列を得るためにC言語を使用し 配列を確保しそのアドレスをfortranで定義してある 配列のアドレスと交換したいのですがどのようにしたら よいでしょうか? 今の段階ではC言語側でアドレスを交換してもfortran 側に戻ると元のアドレスに戻ってしまいます。 fortranとC言語でデータ受け渡すには何か必要な手続き があるのでしょうか?

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

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

この手の複数言語使ってのインターフェイスの話はコンパイラにより異なります。 また、アドレスを交換とありますが、具体的にFORTRANとCでどのような変数をどう扱っているかにもよります。 アドレス交換というのが何をどうやっているのかがわかりませんが、ポインタが扱えないとできないことをやっていそうな気がしますが。

その他の回答 (1)

  • mcWalker
  • ベストアンサー率69% (27/39)
回答No.1

レスがないようなので、ご参考まで。 下記の URL に議論がありました。 「fortran メモリ 確保」で検索して見て下さい。 他にも記事があります。

参考URL:
http://www.inet-lab.org/ted/program/prog204.html

関連するQ&A

  • Fortran と、C言語のデータの受け渡し

    Micro Soft Visual C++ 上で Fortran と、C言語のデータの受け渡しをしたいのですが、例えばC言語でint型のi,jを読み込み、Fortranでi,jを受け取り、その和kを求め、kをC言語に受け渡し、printfでkの値を表示させるプログラムはどんな感じになるんでしょうか? お手数ですがCとFortranのソースコードを教えていただけたらうれしいです。 また、Micro Soft Visual C++ 6.0 と Visual Fortran 6.1a ではできないのでしょうか? 教えてください。

  • FORTRANとC言語のデータ受け渡し。

    卒業論文で計算プログラムをくんでいるのですが、 教授から、とりあえずa,bをCでscanfしてそれをFortranに渡し、 足し算させ和cを出し、それをC言語に持って行き、printfさせるプログラム を組んでみろと。C言語はそれなりにわかるつもりですが、Fortranはさっぱりです。データの受け渡しわかる方教えてください。

  • C言語→Fortranへ

    今学生である私はデータ整理のため、 Fortranを使用し、データ整理を行う予定です。 授業で若干Fortranは扱ったことがあるのでわかります、 今私がやりたいガウスの消去法のn次多項式の例をネット上で探してるのですが、 ほとんどがC言語で紹介されています。 以下のページをFortranにかきかえてもらえるとありがたいです。 http://www.geocities.jp/supermisosan/saisyounizyouhou2.html

  • C言語のプログラムのFORTRANへの変換

    こんにちは。 C言語のプログラムをFORTRANに変換したいのですが、思ったように動きません。 C言語のプログラムをFORTRANに変換できるソフトなどはあるのでしょうか? WEBでは「C2F」というものがあったように記載しているページがありますが、 実際にダウンロードできる場所がみつかりません。 このような変換ができるソフトやC2Fについてご存知の方がいらっしゃいましたら 教えていただけないでしょうか? よろしくお願いいたします。

  • FortranにあってCにない関数?について

    10年間Fortran90でプログラミングをしてきましたが、 C言語を使う必要があって、プログラムを書き直し中の者です。 入門書を数冊読んでいて疑問に思ったのですが、Fortranには、 A=SUM(B) と書けば、配列Bの全ての総和をAに返す、という関数があるのですが、C言語に同じような関数はないのでしょうか?(標準ライブラリに無いという事はないのでしょうか?) Fortranと比べてCは組み込み関数が少ないという印象を持ったのですが実際そうなのでしょうか? また、Fortanでは配列の和をとる時、 do i=0,n a(i)=b(i)+c(i) end do を一行で、 a(0:n)=b(0:n)+c(0:n) と書いても良いですし、もし定義されている全部の配列の要素が対象なら a=b+c と一行で書いても良いのですが、c言語では似たような書き方はできないのでしょうか? つまり、多次元配列を扱う時、Fortranでは単に「a=b+c」と書けば済むところを、Cでは for (i=0,i<=n,i++){ for (j=0,j<=n,j++){ for (k=0,k<=n,k++){ a[i][j][k]=b[i][j][k]+c[i][j][k]; }}} と書かなくてはいけないのか?と悩んでおります。 私がCの機能を知らないだけなのか、Cとはそうゆうことが出来ないのか、浅学なため判断できません。 ご教授ください、どうぞよろしくお願いいたします。

  • fortranで、C言語のsizeof関数に相当するものが分からない

    データ型のバイト数を調べる際、C言語ではsizeof関数が用いられますが、Fortranではどうすればよいでしょうか? 一つの関数でなくとも、そのような機能をもつルーチンでも構いません。

  • C#イベントで作る変数の受け渡し

    c#初心者なので、教えて下さい。  Windowsのフォームアプリケーションです。例えば、あるボタンのクリックイベントにファイルをよむを登録する、とします。この場合はイベントで定義した文字列の配列だとします。そこへ読み込みます。  この配列を使って、加工を行う場合は、ローカルな変数になるので、そのイベントが終了してしまえば、配列は存在しないと思います。  C#ではグローバル変数という物はないそうです。擬似的に作ることは出来るようですが、普通の場合はどうすれば、これを回避できますか?  擬似的グローバル変数を作ったとしても、修飾が付いて見にくいし、ローカルで動的に確保した配列は、大きさが変わるので、呼ぶ側の方で確保しようにも、大体の大きさぐらいで、正確に確保できないように思います。  どうしたらスマートに解決できますか?

  • FortranプログラムからC言語で実装された関数を呼ぶには?

    Windows Vista Home PremiumにFTN95をインストールしたPCにて、Fortranのプログラミングをし始め、「Cpad for Salford FTN77」を利用してプログラミングをしています(FORTRAN77・Fortran90ともに)。FTN95でのFortranプログラミングに際し、FortranプログラムからC言語で実装された関数を呼ぶには、どのように対処すれば可能になりますでしょうか? ユーザーガイドによれば、「Fortranプログラム中に、C_EXTERNALという宣言をした関数は、Cの関数と同じくアクセスできるようになり、C側では、#extern <返り値>関数名(引数)を与えれば、Cの関数として呼び込むことができる。」とのことがかかれています。 実際に使っているファイルをいくつか書き出します。 <D:\fortran\sample.f> C_EXTERNAL WRITE 'WriteFile' : INTEGER*4 INTEGER*4 RESULT RESULT=WRITE() write(*,*) result return end <D:\fortran\sample.c> #extern int Writefile(int); <C:\Program Files\Silverfrost\FTN95\ftn95c.bat> ftn95.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 /link ちなみに、「Cpad for Salford FTN77」での実行/設定/実行/コンパイル時のパラメータは「/link /dreal」です。もちろんftn95.exeへのパスは通してあります。何が問題でしょうか? 何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

  • c言語のmalloc関数、またrealloc関数

    c言語のmalloc関数は確保するメモリの領域を、配列としてのみしか処理出来ないのですか。 つまり、malloc関数で確保したメモリの領域を変数、また多次元配列、また構造体としては処理出来ないのでしょうか。 c言語のrealloc関数は以前の確保したメモリの領域から、確保し直したメモリの領域の場所が変わるかもしれないという事ですが、この場合の場所が変わるという意味は、メモリの領域のアドレスが変わるという事でしょうか。 また、以前の確保したメモリの領域に代入していたデータが使用出来なくなるという事でしょうか。

  • VBでC言語のポインタみたいな使い方?

    VBでC言語のポインタみたいに、一個の関数に配列のアドレスを渡して汎用的に使える方法は出来ますでしょうか? 宜しくお願いします。 PS:配列のデータは直線を描く為のデータです。

専門家に質問してみよう