• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FortranとC#の引数の引き渡し)

FortranとC#の引数の引き渡し

このQ&Aのポイント
  • FortranとC#での引数の引き渡し方法の違いについて疑問があります。特に、配列の要素レベルでの引き渡しについて理解できません。
  • 具体的には、Fortranのコードでは2次元配列の特定の要素を2次元配列で受け取る記述がありますが、C#ではどのように対応するのか分かりません。
  • また、サブプログラムの引数であるwrk(lsx)とwrk(lax)が2次元の配列に対応しているようですが、具体的にどのように書き換えられるのか知りたいです。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8469/18132)
回答No.2

ちょっと間違ってた。 wrk(lsx)=101. wrk(lsx+1)=102. wrk(lsx+2)=103. ... wrk(lsx+mx-1)=100.+float(mx) wrk(lsx+mx)=201. ... wrk(lsx+mx*2-1)=200.+float(mx) ... wrk(lsx+mx*kx1-1)=float(kx1*100)+float(mx) だな。

FORTRANand_C
質問者

補足

ポインター渡しと考え、配列の対応関係も示して頂き大変分かり易く説明して頂きどうも有り難うございました。 改めてですが、FORTRANとC#の配列の並び順についてお教え願います。 FORTRANで定義した配列wrk(nx,ny)はwrk(1,1),wrk(2,1).....wrk(nx,1),wrk(1,2),...wrk(nx,2).....wrk(nx,ny)の順で左側要素から順に増加して存在するが、C#で定義した配列wrk[nx,ny]はwrk[0,0],wrk[0,1].....wrk[0,ny-1],wrk[1,0],...wrk[1,ny-1].....wrk[nx-1,ny-1]の順で右側要素から順に増加して並んでいると考えてよろしいのでしょうか。

その他の回答 (2)

  • f272
  • ベストアンサー率46% (8469/18132)
回答No.3

補足に対する答えは,「その通りです」

FORTRANand_C
質問者

お礼

FORTRANとCの差としての配列のポインター渡しならびに配列の具体的なイメージを簡潔にご教授頂き誠に有り難うございました。

  • f272
  • ベストアンサー率46% (8469/18132)
回答No.1

1. fortranはすべてポインタ渡しだと思えばよい。 Mainでの call sub1( x , mx , z , mz , wrk(lww) , lwrk) のところで,すべての引数はそのアドレスが渡されます。 mx,mz,lwrkは簡単だろう。 x,zはその先頭アドレスが渡されます。 wrk(lww)はwrk(lww)のアドレスが渡されます。先頭アドレスからみるとlww-1だけ進んだところですね。 2. > 配列の引数lsxとlaxはどのような意味をもち すでに説明した。 > sub1のwrkの配列要素はどのように書き換えられるのでしょうか wrk(lsx)=101. wrk(lsx+1)=102. wrk(lsx+2)=103. ... wrk(lsx+mx)=100.+float(mx) wrk(lsx+mx+1)=201. ... wrk(lsx+mx*2)=200.+float(mx) ... wrk(lsx+mx*kx1-1)=float(kx1*100)+float(mx)

関連するQ&A