はじめまして。最近VB6から.NETに乗り換えて、いろいろ混乱中です。
構造体の中で配列を使用したとき、値渡しのはずが、あちらこちらで参照渡しとなってしまいます。配列でない変数は同じ構造体内でも問題ありません。症状は以下の通りです。
・関数の引数で構造体を使用し、引数はByValとする。関数内で構造体内の変数の値を変更すると、配列変数のみ変更が影響してしまう。
・構造体同士でデータをコピーしたあと、コピー元、コピー先どちらかの配列変数の値を変更する → 値が両方とも変わってしまう
VB6では問題なく使用していた気がします。これを防ぐ方法はありますでしょうか?
自己解決しました。
どうやらVB.NETでは配列の受渡しは、まとめて行う場合、どのような
場合でも値渡しにはならず参照渡しになるようですね。(書籍等での
確認ではないですが。。。)
dim a(5),b(5) as integer
a(1)=1
a=b
b(1)=10
で試したところ、予想通り a(1)=10 になりました。
a(1)=1
a(1)=b(1)
b(1)=10
では問題なくa(1)=1 になりました。単体でデータを移動すれば
問題はないようなので、そういう関数を組むことにしました。
Cはよく知らないのですが、これはCの配列に合わせたため
なのでしょうか?とりあえず、お騒がせしました。
ツイート | ![]() |