tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル また不明な点が出てきてしまいました・・。
投稿日: 2007/09/10(Mon) 23:40
投稿者
すいません、再度同じ事になるかもしれませんがお聞きします。

Public Structure PersonStruct
  Dim FirstName As String
   略
End Structure

という構造体があります。
Dim aPersonStruct As New PersonStruct 'Newはオプション
aPersonStruct.FirstName="John"

Dim aPersonStruct2 As PersonStruct
aPersonStruct2=aPersonStruct   '構造体は値型なので新しい変数には元の構造体のコピーが設定される
aPersonStruct2.FirstName ="Ann"
`変更は元の構造体に反映されない
Console.WriteLine(aPersonStruct.FirstName)  `⇒John

抜粋しましたが重要な部分だけ本文から正確に抜き出して見ました。
構造体PersonStructのメンバ変数である「FirstName」は「構造体内の String 型メンバは、ヒープ上の特定のポインタとして格納されるだけである」とありました。
そこでまた判らなくなってしまいました。

aPersonStruct2=aPersonStruct
という部分で値がコピーされているとあります。
ということは構造体のメンバであるFirstNameの指し示すアドレスもコピーされるのではないのでしょうか・・・。
aPersonStruct2=aPersonStruct
とした段階でそのメンバ変数であるFirstNameが指し示すポインタもコピーされる。
ということですよね・・・。
ということはどちらも同じ参照先を指し示すわけですよね。
そして
aPersonStruct2.FirstName ="Ann"とすると
FirstNameの参照先は互いに”Ann"になるのではないのでしょうか・・?
それとも文字列の場合は何か特殊なことがあるのでしょうか・・・

追記です

もしかするとこうなのでしょうか?
aPersonStruct.FirstName  ’構造体内でFirstNameはString型(参照型)で定義

aPersonStruct2.FirstName
も「ヒープの"John"や"Ann”の値が格納されている参照先アドレスが格納されているのではなく、aPersonSTruct、aPersonStruct2が構造体変数(値型)である段階でメンバ変数が参照型であっても「値(AnnやJohn)」そのものが格納される」

そうすると強引かもしれないですがつじつまがあってくるですが。

aPersonStruct.FirstName ="john" ’FirstNameは参照アドレス画はいるのではなく、値である「John」そのものが入る
aPersonStruct2=aPersonStruct   ` メンバ変数のFistNameはString参照型だが「値」である”John"だけが渡される
aPersonStruct2.FirstName ="Ann"   'aPersonStruct2.FirstNameには参照アドレスがコピーされたわけではないので影響はない

魔界の仮面弁士様の例ですと
構造体のメンバ変数は「値型」のIntegerですよね・・。
これの場合はなんとなくわかるんです。
コピーが渡されることが・・・
構造体の変数である段階でそのメンバ変数が参照型でも値型でも、すべて「値」そのものが渡されるのでしょうか・・・

また長くなりましたがよろしくお願いします。
C言語などを勉強したほうがよいのでしょうか?

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。