>>23 Type 命令文関係を見てみます。
のつづき。Type みてもわからなかったので、逃げの九素コードを
大域宣言は
'複素数(虚数)計算 '(2017.01.29 済)名称変更 Conplex → Complex
Type Complex
RealPart As Double
ImagPart As Double
End Type
で。ご指摘の通り、n → m への変更済み。
http://makoto-watanabe.main.jp/freebasic/PgFunction.html より、
関数は、Byref As return_type を指定して、参照を返すこともできます。
とあるので、破壊されない戻り値を保管する場所が必要。
局所ルーチンで参照され、破壊されない戻り値の保管場所は、九素コードとして、大域変数を使う。
Dim Shared ComComplexVal As Complex
関数としては単なるLET文を用意した。
Function TekiToComp(Aval As Complex) ByRef As Complex
ComComplexVal.RealPart = Aval.RealPart
ComComplexVal.ImagPart = Aval.ImagPart
TekiToComp = ComComplexVal
End Function
参照側で
ComComplexVal.RealPart = -5.0: ComComplexVal.ImagPart = -0.5
Complex1Val.RealPart = 1.0: Complex1Val.ImagPart = 0.1
Complex2Val.RealPart = 2.0: Complex2Val.ImagPart = 0.2
と定義して
Complex2Val = TekiToComp(Complex1Val)
関数を実行、3つの変数すべてが Complex1Val の値で一致する。
ここで、ComComplexValに適当な値を設定しても、Complex2Val の値が変化しなかった。
参照渡しと言っても、Complex2Valのアドレス(ポインター)をComComplexValのソレに書き換えるのではなかった。
3つの変数の保存領域は独立して存在する。