Объявление и инициализация статического многомерного массива

Программирование на Visual Basic for Applications
VVV
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 26.10.2009 (Пн) 10:31

Объявление и инициализация статического многомерного массива

Сообщение VVV » 26.10.2009 (Пн) 10:34

Собсно как?
Я так понимаю его нужно и объявлять и сразу инициализировать, но всевозможные варианты сколько не пробовал не катят, в том числе примеры из VB(

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Объявление и инициализация статического многомерного массива

Сообщение alibek » 26.10.2009 (Пн) 10:38

Статические массивы объявляются и инициализируются одномоментно.
Lasciate ogni speranza, voi ch'entrate.

VVV
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 26.10.2009 (Пн) 10:31

Re: Объявление и инициализация статического многомерного массива

Сообщение VVV » 26.10.2009 (Пн) 10:42

alibek писал(а):Статические массивы объявляются и инициализируются одномоментно.

Пример можете привести? Трудности именно как это описать правильно синтаксически...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Объявление и инициализация статического многомерного массива

Сообщение alibek » 26.10.2009 (Пн) 12:01

Dim A(2,3,4)
Lasciate ogni speranza, voi ch'entrate.

VVV
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 26.10.2009 (Пн) 10:31

Re: Объявление и инициализация статического многомерного массива

Сообщение VVV » 26.10.2009 (Пн) 16:50

alibek писал(а):Dim A(2,3,4)

Указание макс. длин это и есть пример инициализации массива? Спасибо...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Объявление и инициализация статического многомерного массива

Сообщение alibek » 27.10.2009 (Вт) 8:59

Нет. Статические массивы всегда инициализируются при объявлении.
А указание размерности массива при объявлении — это признак того, что массив статический.
Lasciate ogni speranza, voi ch'entrate.

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

Re: Объявление и инициализация статического многомерного массива

Сообщение Денис » 27.10.2009 (Вт) 10:25

VVV писал(а):
alibek писал(а):Dim A(2,3,4)

Указание макс. длин это и есть пример инициализации массива? Спасибо...


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

VVV
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 26.10.2009 (Пн) 10:31

Re: Объявление и инициализация статического многомерного массива

Сообщение VVV » 27.10.2009 (Вт) 12:04

Денис писал(а):
VVV писал(а):
alibek писал(а):Dim A(2,3,4)

Указание макс. длин это и есть пример инициализации массива? Спасибо...


Любопытно, с какого языка Вы пришли в бейсик?

Соскучился за VBA, вот и пришел)

Вообще я имел ввиду как его можно сразу объявить и инициализировать данными, что-то вроде
Код: Выделить всё
Dim A(,,,) as String = New Array({"dddd", "asgsadg", asdasdg"}, {"ffff", "ggggg", "vvvvv"}, {"ffwgsdg", "awtewet", "sadgsadgsadg"})

чтобы не писать потом присвоение каждому элементу...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Объявление и инициализация статического многомерного массива

Сообщение alibek » 27.10.2009 (Вт) 12:19

В VB6 этого нет, массивы инициализируются только нулями или пустыми строками.
Кроме того, Array({"dddd", "asgsadg", asdasdg"}, {"ffff", "ggggg", "vvvvv"}, {"ffwgsdg", "awtewet", "sadgsadgsadg"}) — это не многомерный массив, это вложенный массив.
Lasciate ogni speranza, voi ch'entrate.

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

Re: Объявление и инициализация статического многомерного массива

Сообщение Денис » 27.10.2009 (Вт) 13:59

Аха, из дельфы пришёл. С этого и надо было начинать. Как это не парадоксально, но именно борландовское поделие прививает вредные привычки программирования. Начинаешь путать инициализацию и присвоение, путать многомерность и вложенность.

Прошу извинить за прямоту и не банить.

UPD
Как написал это сообщение, вспомнил про ParamArray и попытался воспроизвести это безобразие в VB, но не могу правильно интерпретировать результаты.
В качестве функции Array({},{},{}) у меня рекурсивно вызывается функция m(X) и вроде бы даже создает что-то, но это что-то похоже на неведому зверушку. А кроме того, всё на вариантах. И еще, массивы здесь только динамические, статические даже и разговаривать не желают.

В общем, гляньте на сей изврат:

Код: Выделить всё
Option Explicit

Dim varArr() As Variant 'Обязательно этот тип


Private Sub Form_Load()

'Инициализация
ReDim varArr(3, 3, 3)

'Заполнение
varArr = m(m("B1", "B2", "B3"), m("B4", "B5", "B6"), m("B7", "B8", "B9"))

'для теста вывожу полученное содержимое в файл
Open "D:\Temp\OutArr.bin" For Binary As #1
   Put #1, , varArr
Close #1

'Здесь выходит ошибка, что бы я ни пытался извлечь
'Debug.Print varArr(1,1,1)

'А это рабочий вариант с одномерным динамическим массивом.
Dim a()
ReDim a(3)
a() = m("sdfsdfksdj", "sdfwrcvx", "ghjyrtyn")
Debug.Print a(0), a(1), a(2)

End Sub

'Вот она зверь-функция
Function m(ParamArray X() As Variant) As Variant
   
   m = X
   
End Function
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в VBA

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

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 13

    TopList