Я использую это при создании динамического массива. Если у вас есть класс или структура. И это работает. Пример:
struct Sprite {
int x;
};
int main () {
int num = 50;
Sprite **spritearray;//a pointer to a pointer to an object from the Sprite class
spritearray = new Sprite *[num];
for (int n = 0; n < num; n++) {
spritearray[n] = new Sprite;
spritearray->x = n * 3;
}
//delete from random position
for (int n = 0; n < num; n++) {
if (spritearray[n]->x < 0) {
delete spritearray[n];
spritearray[n] = NULL;
}
}
//delete the array
for (int n = 0; n < num; n++) {
if (spritearray[n] != NULL){
delete spritearray[n];
spritearray[n] = NULL;
}
}
delete []spritearray;
spritearray = NULL;
return 0;
}
Почему бы не использовать For Each
? Тем путем Вы не должны заботиться, какой LBound
и UBound
.
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
Существует серьезное основание к [1 122] НЕ, ИСПОЛЬЗУЮТ For i = LBound(arr) To UBound(arr)
dim arr(10)
, выделяет одиннадцать членов массива, 0 до 10 (принятие Основы опции по умолчанию VB6).
Многие программисты VB6 предполагают, что массив на основе один, и никогда не используйте выделенный arr(0)
. Мы можем удалить потенциальный источник ошибок при помощи For i = 1 To UBound(arr)
или For i = 0 To UBound(arr)
, потому что тогда ясно, используется ли arr(0)
.
For each
делает копию каждого элемента массива, а не указатель.
Это имеет две проблемы.
, Когда мы пытаемся присвоить значение элементу массива, это не размышляет исходный. Этот код присваивает значение 47 к переменной i
, но не влияет на элементы arr
.
arr = Array(3,4,8) for each i in arr i = 47 next i Response.Write arr(0) '- returns 3, not 47
Мы не знаем индекса элемента массива в for each
, и нам не гарантируют последовательность элементов (хотя это, кажется, в порядке.)
LBound
может не всегда быть 0.
, Пока не возможно создать массив, который имеет что-либо кроме 0 Нижних границ в VBScript, все еще возможно получить массив вариантов от COM-компонента, который, возможно, определил различное LBound
.
, Который сказал, что я никогда не сталкивался с тем, который сделал что-либо как этот.
Вероятно, это прибывает из VB6. Поскольку с оператор Option Base в VB6, можно изменить нижнюю границу массивов как это:
Option Base 1
Также в VB6, можно изменить нижнюю границу определенного массива как это:
Dim myArray(4 To 42) As String
Это - мой подход:
dim arrFormaA(15)
arrFormaA( 0 ) = "formaA_01.txt"
arrFormaA( 1 ) = "formaA_02.txt"
arrFormaA( 2 ) = "formaA_03.txt"
arrFormaA( 3 ) = "formaA_04.txt"
arrFormaA( 4 ) = "formaA_05.txt"
arrFormaA( 5 ) = "formaA_06.txt"
arrFormaA( 6 ) = "formaA_07.txt"
arrFormaA( 7 ) = "formaA_08.txt"
arrFormaA( 8 ) = "formaA_09.txt"
arrFormaA( 9 ) = "formaA_10.txt"
arrFormaA( 10 ) = "formaA_11.txt"
arrFormaA( 11 ) = "formaA_12.txt"
arrFormaA( 12 ) = "formaA_13.txt"
arrFormaA( 13 ) = "formaA_14.txt"
arrFormaA( 14 ) = "formaA_15.txt"
Wscript.echo(UBound(arrFormaA))
''displays "15"
For i = 0 To UBound(arrFormaA)-1
Wscript.echo(arrFormaA(i))
Next
Hope это помогает.