Динамический тип-массив в VB

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Динамический тип-массив в VB

Сообщение Денис » 24.01.2008 (Чт) 17:36

Скажите я правильно понимаю, как сделать кальку объявления типа «массив» из Паскаля в бейсик:
Код: Выделить всё
Private Type TArrayType
  TArray() As Integer
End Type

Sub Form_Load()

Dim arr1 As TArrayType
ReDim arr1.TArray(100)
Dim arr2 As TArrayType

Dim out As Integer

arr1.TArray(50) = 256
arr2 = arr1

out = arr2.TArray(50)

'или

Debug.Print arr2.TArray(50)

End Sub

Может есть другие варианты?

P.S. Понятно, что все это пятое колесо для телеги и все эти вещи (присвоение, изменение размерности и т.п.) делаются с простыми массивами (а не типами), но очень интересно в плане портирования паскалевского кода на бейсик.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 25.01.2008 (Пт) 14:13

Ап! :evil:
Мне действительно интересно! А многомерные динамические массивы так же создаются?

Вот
Код: Выделить всё
Private Type Point3D
    X() As Single
    Y() As Variant
    Z() As Single
End Type

Sub Main()

Dim MyPnt As Point3D
Dim i As Integer

ReDim MyPnt.X(1 To 3)
ReDim MyPnt.Y(1 To 3)
ReDim MyPnt.Z(1 To 3)

For i = 1 To 3
    MyPnt.X(i) = i
Next

MyPnt.Y = Array(0, 10, 20, 30)

For i = 1 To 3
    MyPnt.Z(i) = i * 100
    Debug.Print MyPnt.X(i), MyPnt.Y(i), MyPnt.Z(i)
Next

End Sub


Но обращение корявое, не как к массиву, а как к структуре, что есть криво.
Хм, вообще, что есть массив? Просто функция одной или более аргументов... Но если и написать такую функцию, то ведь она 100 пудов будет занимать в десять раз больше памяти, чем несколько одномерных массивов...
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 25.01.2008 (Пт) 21:45

Насколько я себе представляю вообще, массив это указатель на блок памяти в котором лежат значения по порядку. При обращении к индексу, высчитывается указатель именно на ту ячейку, где лежит данный элемент. Но что массив - функция впервые слышу :lol:
#define ROFL 0xDDDD

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 25.01.2008 (Пт) 23:30

Да практически как угодно можно извращаться:

Код: Выделить всё
Private Type DateT
     FN As String
     FT As ADODB.DataTypeEnum
     FL As Integer
End Type

Private Type CPoint3D
     F() As Field
End Type

Private Type Point3D
    X() As Single
    Y() As Variant
    Z() As Single
    C() As CPoint3D
End Type

Sub Main()
    Dim MyPnt() As Point3D
    ....
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList