Private Structure S1'int_A をメンバーに持つ構造体を定義
Dim int_A As Integer
End Structure
Private Structure S2構造体配列 udt_S1() をメンバーに持つ構造体を定義
Dim udt_S1() As S1
End Structure
'--------------------------------------------------
'①代入
'--------------------------------------------------
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim udt_Dummy(10) As S1'構造体配列を宣言
Dim udt_S2 As S2’構造体を宣言
udt_S2.udt_S1 = udt_Dummy’構造体に構造体配列を登録
Debug.WriteLine("udt_Dummy(0).int_A = " & udt_Dummy(0).int_A)’結果は 1
Debug.WriteLine("udt_S2.udt_S1(0).int_A = " & udt_S2.udt_S1(0).int_A)'結果は 1
End Sub
'--------------------------------------------------
'②初期化
'--------------------------------------------------
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim udt_Dummy(10) As S11'構造体配列を宣言
Dim udt_S2 As S2’構造体を宣言
udt_S2.udt_S1 = udt_Dummy’構造体に構造体配列を登録
udt_Dummy(0).int_A = 1
ReDim udt_Dummy(0)'初期化
Debug.WriteLine("udt_Dummy(0).int_A = " & udt_Dummy(0).int_A)'結果は 0
Debug.WriteLine("udt_S2.udt_S1(0).int_A = " & udt_S2.udt_S1(0).int_A)'結果は 1
End Sub
構造体に構造体配列を登録するときに、構造体配列のアドレスがメンバーになるのなら、
①の様に実体の構造体配列を初期化すると、構造体のメンバーの構造体配列も初期化されると思うのですが?
どなたかご存知の方よろしくお願いします。
タイトルがおかしいですね。
×構造体配列をメンバーに持つ構造体を初期化するには?
○構造体のメンバーの構造体配列を初期化するには?
スマソ。
度々スンマセン。①代入で
udt_S2.udt_S1 = udt_Dummy’構造体に構造体配列を登録
の後に
udt_Dummy(0).int_A = 1
が抜けてます。
勘でレスしてます。
ReDimのヘルプを見ると、
『動的配列変数に対するメモリ領域の再割り当てを行います。』
と書いてあります。
再割り当てしたらudt_Dummyは別のアドレスになるんじゃないでしょうか?
即レスどうもです。
Array.Clear(udt_Dummy, 0, udt_Dummy.Length)
なら目的を達成することが出来ます。
ReDim udt_Dummy(0)
ReDim udt_S2.udt_S1(0)
とすると、Array.Clear と同じ効果が得られます。
ReDim udt_Dummy(0)
udt_S2.udt_S1 = udt_Dummy←再登録
とすると、Array.Clear と同じ効果が得られます。
ReDimによってudt_Dummyが別アドレスになってたんですね。
ありがとうございました!