powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Dim a1() vs Dim a2
25 сообщений из 52, страница 1 из 3
Dim a1() vs Dim a2
    #39021139
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем по сути отличаются декларации:
Код: vbnet
1.
Dim a1()


и
Код: vbnet
1.
Dim a2


?
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021150
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 по сути массив, 2 по сути что угодно.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021178
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое - неинициализированный динамический массив элементов типа Variant.
Второе - одиночная переменная типа Variant.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021186
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по сути - способом проверки допустимости типа присваиваемого значения
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021196
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyпо сути - способом проверки допустимости типа присваиваемого значенияхорошо сказал.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021442
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понимаю, что "2 по сути что угодно". Переформулирую вопрос.
Чем по сути отличаются конструкции:
Код: vbnet
1.
2.
Dim a1()
ReDim a1(100) as Byte


и
Код: vbnet
1.
2.
Dim a2
ReDim a2(100) as Byte


?
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021454
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тем, что во втором случае ты не сможешь написать
Код: vbnet
1.
a2(0) = 1
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021482
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS,
по сути ответил Antonariy 17965772 .

ЗЫ:
YouTube Video
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021511
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища,

да нет, лучше всего ответил booby.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021625
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
после ReDim я смогу написать Let a2(0) = 1 точно также как Let a1(0) = 1
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021628
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... а до ReDim - точно также - не смогу.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39021644
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSShocker.Pro,
после ReDim я смогу написать Let a2(0) = 1 точно также как Let a1(0) = 1написать-то ты сможешь, а скомпилировать?
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39022144
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSЯ понимаю, что "2 по сути что угодно". Переформулирую вопрос.
Чем по сути отличаются конструкции:
Код: vbnet
1.
2.
Dim a1()
ReDim a1(100) as Byte


и
Код: vbnet
1.
2.
Dim a2
ReDim a2(100) as Byte


?

тем что в первом случае производится несанкционированная попытка изменения типа переменной. Тип элемента массива не может быть заменен при динамическом переразмещении массива, если переменная была объявлена как переменная, ссылающаяся на массив однажды (и навсегда) заявленного типа.
Этот код не сможет скомпилироваться, т.к. заявленный тип элемента массива a1 не может быть динамически заменен в данном случае.

Во втором случае компилятор считает, что базовый тип a2 не меняется - был вариант и остался вариант.
Просто после выполнения Redim этот вариант стал содержать массив.
Поэтому, как в последующем redim-е массив может быть пересоздан с заменой типа элемента, так и волшебно вообще перестать быть массивом и превратиться - хочешь в дату, а хочешь - в строку - по велению писателя, а потом опять в массив, пока не видно, с каким типом элемента, т.к. программист не успел еще написать этот кусок кода.

Все эти действия вообще не меняют (базового) типа переменной a2, а меняют только ее
"подтип". Поэтому все они последовательно допустимы.

Вообще стоит справку почитывать.
конкретно этот вопрос детально освещен в справке на redim:

[You can use the ReDim statement repeatedly to change the number of elements and dimensions in an array. However, you can't declare an array of one data type and later use ReDim to change the array to another data type, unless the array is contained in a Variant. If the array is contained in a Variant, the type of the elements can be changed using an As type clause, unless you’re using the Preserve keyword, in which case, no changes of data type are permitted.
---
Note To resize an array contained in a Variant, you must explicitly declare the Variant variable before attempting to resize its array.
]
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39022715
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, спасибо за ваше терпение. Попробую третью попытку.

Будет ли код, начинающийся с
Код: vbnet
1.
2.
Dim a1() as Byte
ReDim a1(100)



более "эффективен", чем код, начинающийся с
Код: vbnet
1.
2.
Dim a2
ReDim a2(100) as Byte


?
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39022727
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,

еще раз - до эффективности
у этого кода
Код: vbnet
1.
2.
Dim a1() as Byte
ReDim a1(100)



нет шансов скомпилироваться.

про "эффективен":
становится откровенно скучно.
Придайте этому "слову" набор конкретных смыслов, пригодных к обсуждению.
Может быть и про "эффективность" тогда поговорим.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39022760
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
Dim a1()
ReDim a1(100) as Byte


- это была ошибка, я её признаю, написал впопыхах.

Но с кодом
Код: vbnet
1.
2.
Dim a1()  as Byte
ReDim a1(100)


всё в порядке.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39022772
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS,
ок
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39022898
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, собственно, почему спрашиваю - вторая конструкция позволяет легко проверять, инициирован ли массив:

Код: vbnet
1.
2.
3.
4.
Static a2
If not IsArray(a2) Then
      ReDim a2(100) as ЧтоТо
End If


...
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39023044
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первая тоже позволяет
Код: vbnet
1.
2.
3.
4.
Dim a1()
If ((Not a1) = -1) Then
    ReDim a1(100)
End If
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39023158
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hclubmk, это фантастика! Я реально выпал в осадок!!

Кто-нибудь может объяснить, на каком основании код
Код: vbnet
1.
2.
Dim a1()
If  Not a1 Then stop


- является корректным?

При том что код
Код: vbnet
1.
2.
Dim a1()
If  a1 Then stop


- вполне ожидаемо (для меня по крайней мере) является некорректным.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39023274
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно потому, что условие под if MSDNRequired. Expression. Must evaluate to True or False , or to a data type that is implicitly convertible to Boolean
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39023311
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDNRequired. Expression. Must evaluate to True or False , or to a data type that is implicitly convertible to Booleanне подходит. Тогда бы работало без Not, а также CBool(a), ан нет
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39023325
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSКто-нибудь может объяснить, на каком основании код
Код: vbnet
1.
2.
Dim a1()
If  Not a1 Then stop


- является корректным?
.

На том основании:

авторNot Operator
Performs logical negation on a Boolean expression, or bitwise negation on a numeric expression.
result: Required. Any Boolean or numeric expression.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39023326
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proа также CBool(a) Круто! а такое преобразование типов (я имею ввиду массив) допустимо вообще? Да и без Not к bool явно не преобразовывается.
...
Рейтинг: 0 / 0
Dim a1() vs Dim a2
    #39023339
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hclubmkShocker.Proа также CBool(a) Круто! а такое преобразование типов (я имею ввиду массив) допустимо вообще? Да и без Not к bool явно не преобразовывается.так о чем и речь. Почему CBool(a1) нельзя, а Not a1 можно?
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 1 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Dim a1() vs Dim a2
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]