C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■91913 / 8階層)  C++からVBへの変換
□投稿者/ 魔界の仮面弁士 (2292回)-(2019/08/09(Fri) 13:54:08)
2019/08/09(Fri) 17:05:54 編集(投稿者)

No91910 (えんえん さん) に返信
> つまり、要素数r以降の配列を
> 別の配列にコピーすれば同じことができるわけでしょうか?

配列をコピーする必要はありません。同じ配列を参照しておき、
その配列のどの位置を読み書きするのかという、Index 情報さえあれば OK です。

というか、今回の fft は配列引数の内容を書き換えるものなので、
配列の「コピー」を渡してしまっては、再帰処理の意味が無いと思います。



No91907 (えんえん さん) に返信
> C++でいう
> &tmpr[r]
> これって要素rだけを取り出しているのでしょうか?

実引数 &x[2] が 仮引数 y[] に渡されたとき、
y[1] は、呼び出し元の x[3] を意味します。


下記のようにすると、
 22, 33, 55
 11, 22, 44
と出力されます。

// ------------------
void fff(double ar[])
{
 std::cout << ar[-1] << ", " << ar[0] << ", " << ar[2] << std::endl;
}

int main()
{
 double ary[5];
 ary[0] = 11;
 ary[1] = 22;
 ary[2] = 33;
 ary[3] = 44;
 ary[4] = 55;

 fff(&ary[2]);
 fff(&ary[1]);

 return 0;
}


> あるいはr以降を取り出しているのでしょうか?

とりあえず、VB でこんな処理があったとします。
この場合、仮引数「d」は、実引数「dblArray(1)」への参照となっています。

 Sub Main()
  Dim dblArray As Double() = {11, 22, 33}
  Test(dblArray(1))
  Array.ForEach(dblArray, AddressOf Console.WriteLine)
 End Sub
 Sub Test(ByRef d As Double)
  d = 123
 End Sub


上記を実行すると、配列の内容が {11, 22, 33} から { 11, 123, 33 } に変化します。


Test 側で dblArray(1) だけでなく dblArray(2) も書き換えられるようにする場合には、
配列全体を渡すようにして、書き換える位置を別の引数で渡すようにします。

 Sub Main()
  Dim dblArray As Double() = {11, 22, 33}
  Test(dblArray, 1)
  Array.ForEach(dblArray, AddressOf Console.WriteLine)
 End Sub
 Sub Test(ByVal d As Double(), ByVal i As Integer)
  d(i + 0) = 123
  d(i + 1) = 456
 End Sub




> これをVBで書くとどうなりますか?

たとえば上記の処理は、最近の C# だとこのように書けます。

/* 要 C# 7.2 以上 / VS2017 15.5 以上 */
static void Main()
{
  double[] dblArray = { 11, 22, 33 };
  Test(dblArray.AsSpan(1)); // { 22, 33 } が渡される
  Array.ForEach(dblArray, Console.WriteLine); // { 11, 123, 456 } が渡される
}

private static void Test(Span<double> span)
{
  span[0] = 123;
  span[1] = 456;
}


将来的には Visual Basic でも同じように書ける様になると思いますが、
現状の言語仕様だと、自前で位置管理の変数を追加するなり、
ArraySegment を経由させるなり、あるいは IntPtr で
アンマネージ管理する力技ぐらいしか手が無いかと思います。

今回のように再帰呼び出しなら、クロージャにまとめてしまっても良いかも。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[7]: C++からVBへの変換 /えんえん →Re[9]: C++からVBへの変換 /えんえん
 
上記関連ツリー

C++からVBへの変換 / えんえん (19/08/08(Thu) 22:51) #91899
Re[1]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/08(Thu) 23:48) #91900
  └ Re[2]: C++からVBへの変換 / えんえん (19/08/09(Fri) 10:36) #91905
    └ Re[3]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/09(Fri) 12:18) #91906
      └ Re[4]: C++からVBへの変換 / えんえん (19/08/09(Fri) 12:28) #91907
        └ Re[5]: C++からVBへの変換 / Hongliang (19/08/09(Fri) 12:46) #91908
          └ Re[6]: C++からVBへの変換 / ぶなっぷ (19/08/09(Fri) 13:05) #91909
            └ Re[7]: C++からVBへの変換 / えんえん (19/08/09(Fri) 13:12) #91910
              ├ Re[8]: C++からVBへの変換 / Hongliang (19/08/09(Fri) 13:18) #91911
              │└ Re[9]: C++からVBへの変換 / えんえん (19/08/09(Fri) 13:23) #91912
              │  └ Re[10]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/09(Fri) 17:42) #91917
              └ C++からVBへの変換 / 魔界の仮面弁士 (19/08/09(Fri) 13:54) #91913 ←Now
                └ Re[9]: C++からVBへの変換 / えんえん (19/08/10(Sat) 07:13) #91924
                  └ Re[10]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/10(Sat) 09:41) #91925
                    └ Re[11]: C++からVBへの変換 / えんえん (19/08/10(Sat) 10:16) #91927
                      └ Re[12]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/10(Sat) 14:19) #91930
                        └ Re[13]: C++からVBへの変換 / 774RR (19/08/10(Sat) 15:02) #91932
                          ├ Re[14]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/10(Sat) 16:23) #91933
                          │└ Re[15]: C++からVBへの変換 / えんえん (19/08/11(Sun) 21:42) #91934
                          │  └ Re[16]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/12(Mon) 12:05) #91938
                          │    ├ Re[17]: C++からVBへの変換 / えんえん (19/08/12(Mon) 14:12) #91939
                          │    │├ Re[18]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/12(Mon) 16:25) #91940
                          │    │├ Re[18]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/12(Mon) 17:33) #91942
                          │    │└ Re[18]: C++からVBへの変換 / 774RR (19/08/12(Mon) 16:56) #91941
                          │    └ Re[17]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/13(Tue) 01:00) #91946
                          └ Re[14]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/12(Mon) 22:51) #91944
                            └ Re[15]: C++からVBへの変換 / えんえん (19/08/13(Tue) 11:01) #91947

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信