構造体内の配列変数が参照渡しになってしまいます

解決


らいちゅ  2003-10-15 23:11:23  No: 109147

はじめまして。最近VB6から.NETに乗り換えて、いろいろ混乱中です。

構造体の中で配列を使用したとき、値渡しのはずが、あちらこちらで参照渡しとなってしまいます。配列でない変数は同じ構造体内でも問題ありません。症状は以下の通りです。

・関数の引数で構造体を使用し、引数はByValとする。関数内で構造体内の変数の値を変更すると、配列変数のみ変更が影響してしまう。
・構造体同士でデータをコピーしたあと、コピー元、コピー先どちらかの配列変数の値を変更する  →  値が両方とも変わってしまう

VB6では問題なく使用していた気がします。これを防ぐ方法はありますでしょうか?


らいちゅ  2003-10-16 00:26:01  No: 109148

自己解決しました。
どうやら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の配列に合わせたため
なのでしょうか?とりあえず、お騒がせしました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加