若數組下標從非 0 開始(如 5-10),能否直接拼接另一數組且不改變下標?
VB6 支持任意下標範圍 Dim arr(5 To 10)。拼接時需考慮下標映射,不能單純內存複製,因為邏輯下標不連續。
Dim A(5 To 10) As Long, B(20 To 25) As Long
Dim C() As Long
' 目標:C(5 To 10) = A, C(11 To 16) = B (邏輯連續)
ReDim C(5 To 16)
' 複製 A
For i = 5 To 10: C(i) = A(i): Next
' 複製 B,下標偏移
For i = 20 To 25: C(i - 15) = B(i): Next ' 11-16 對應 20-25
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Source As Any, ByVal Length As Long)
' 僅適用於數值類型數組且下標連續、元素大小固定時
CopyMemory C(5), A(5), 6 * 4 ' 複製 6 個 Long (4字節)
CopyMemory C(11), B(20), 6 * 4
注意:CopyMemory 需確保數組在內存中連續佈局,VB6 定長數組滿足條件。