タイトル : また不明な点が出てきてしまいました・・。 投稿日 : 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言語などを勉強したほうがよいのでしょうか? |