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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.91942 の関連記事表示

<< 0 >>
■91942  Re[18]: C++からVBへの変換
□投稿者/ 魔界の仮面弁士 -(2019/08/12(Mon) 17:33:28)
    No91939 (えんえん さん) に返信
    > できれば、最終回答をお教えいただけないでしょうか?
    > 恐らく、こうやって何度もやりとりするよりも
    > 効率的だと思うのですが・・・

    申し訳ありませんが、現状は言語文法的な側面からしか回答できません。

    自分は高速フーリエ変換について正確に理解しているわけではないため、
    「作成依頼」に近い「質問」をされても、デバッグすることができないためです。


    実引数としてどういう値を入れた時に、なんという結果が返されるのか示す、
    ブラックボックステストのための情報があるわけでも無いですし。



    > もし、出力引数がなければ、
    > 再帰処理の意味がなくなってしまうと思うのですが・・・

    今回は ByVal で十分でしょう。

    改めて、 No91906 の最後の個所にあるコードで説明してみます。
    今回は意図的に ByVal を付けておきます。

      Sub Test4_Modify(ByVal a As ArraySegment(Of Double))
        a.Array(a.Offset + 1) *= 10
      End Sub

    このコードは「ByVal a As ArraySegment(Of T)」という宣言になっていますが、
    呼び出し元の値は、きちんと 10 倍になっています。


    ・ArraySegment(Of T) 構造体は値型。

    ・T が値型であれ参照型であれ、配列 T() は列は常に「参照型」。

    ・a.Array プロパティが返す型は As T() なので「参照型」。

    ・a.Array プロパティは ReadOnly であり、書き換えられない。
     たとえば「a.Array = Nothing」などと書くことはできない。

    ・a.Array プロパティから返される「一次元配列」は、
     ReadOnly というわけではないので、その要素を書き換えることができる。
     たとえば「a.Array(0) = Nothing」や「a(1) *= 10」と書いても良い。



    ==== 入力引数の例 <In> === ※いずれも ByVal で書いている。

     Sub Method1(ByVal x() As Integer)
       x(0) = 100 ' 呼び出し元の実引数では、配列の先頭要素が 100 に替わる。ただし、配列そのものが指しかわるわけでは無い。
     End Sub

     Sub Method2(ByVal lbl As Label)
       lbl.Text = CStr(Now) ' 呼び出し元で指定した Label のテキストが変化する。ただし、Label 型変数が別のラベルを指し示すわけでは無い。
     End Sub

     Sub Method3(ByVal pt As Point)
       Console.WriteLine("{0}, {1}", pt.X, pt.Y)
     End Sub


    ==== 出力引数の例 <Out> === ※いずれも ByRef で書いている。

     Sub Method4(ByRef x() As Integer)
       x = New Integer() { 0, 1, 2, 3 } ' 呼び出し元が渡した変数の内容は、新しい配列の参照へと差し替わる。
     End Sub

     Sub Method5(ByRef f As Form)
       f = New Form2() ' 呼び出し元が渡した変数の内容は、Form2 への参照へと書き換わる。
     End Sub

     Sub Method6(ByRef i As Integer)
       i = 12345 ' 呼び出し元が渡した変数の内容は、12345 という値に書き換わる。
     End Sub

     Sub Method7(ByRef pt As Point)
       pt = New Point(-1, 1) ' 呼び出し元が渡した変数の内容は、座標 (-1, 1) という値に置き換わる。
     End Sub


    ==== 入出力引数の例 <In, Out> === ※いずれも ByRef でなければならない。

     Sub Method8(ByRef x As Integer)
       x += 1
     End Sub

     Sub Method9(ByRef pt As Point)
       pt.Offset(-1, 1)
     End Sub

     Function Method10(ByVal x As Point) As Point
       pt.Offset(-1, 1)
       Return pt
     End Sub
記事No.91899 のレス /過去ログ158より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -