私はFortranの初心者です。gfortranでコンパイルするためにいくつかのifortコードを採用しようとしています。動的配列を持つc_loc()
私はのifortではなくのgfortranコンパイルと動的配列を受け入れているようだc_loc()
機能に問題を持っているがエラーで停止します
Error: Argument 'septr1' to 'c_loc' at (1) must be an associated scalar POINTER
だから、誰でものgfortranでコンパイルするために、次のifortコードを適応させる方法を知ってい?
integer(c_int), dimension(:), pointer :: septr1=>null()
type(c_PTR) :: septr
allocate (septr1(10))
septr1 = 33
septr = c_loc(septr1)
tnx、この音は簡単です。この方法では、配列はcプログラムから正しくアクセスできますか?私はウェブ上のどこかでfortranがcと同じ方法で配列のメモリを扱っていないと読んでいます – kodmasin
アクセス可能ですが、インデックスの順序は逆になります。 http://en.wikipedia.org/wiki/Row-major_order不連続な配列に問題がある可能性があります。しかし、実際には、通常のFortranの方法で配列を参照渡しし、明示的なCポインタを使用しない方がはるかに優れています。答えの編集2を参照してください。 –
@VladimirFでは、Cポインタを使用する代わりに、Fortran配列を参照渡しするほうがずっと優れていますか?型の安全性と明快さのほんの一部ですか? – patrickvacek