- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FortranとC#の引数の引き渡し)
FortranとC#の引数の引き渡し
このQ&Aのポイント
- FortranとC#での引数の引き渡し方法の違いについて疑問があります。特に、配列の要素レベルでの引き渡しについて理解できません。
- 具体的には、Fortranのコードでは2次元配列の特定の要素を2次元配列で受け取る記述がありますが、C#ではどのように対応するのか分かりません。
- また、サブプログラムの引数であるwrk(lsx)とwrk(lax)が2次元の配列に対応しているようですが、具体的にどのように書き換えられるのか知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと間違ってた。 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) だな。
その他の回答 (2)
- f272
- ベストアンサー率46% (8469/18132)
回答No.3
補足に対する答えは,「その通りです」
質問者
お礼
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)
補足
ポインター渡しと考え、配列の対応関係も示して頂き大変分かり易く説明して頂きどうも有り難うございました。 改めてですが、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]の順で右側要素から順に増加して並んでいると考えてよろしいのでしょうか。