Dim aR1.s(3)
aR1(0)="000"
aR1(1)="1"
aR1(2)="222"
aR1(3)="333"
PrintN(Str(@aR1())) ; здесь число=указатель
p.q=@aR1()
что можно сделать дальше?
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » PureBasic для Windows » как получить элементs массива имея только указатель на массив?
Dim aR1.s(3)
aR1(0)="000"
aR1(1)="1"
aR1(2)="222"
aR1(3)="333"
PrintN(Str(@aR1())) ; здесь число=указатель
p.q=@aR1()
что можно сделать дальше?
что можно сделать дальше?
Можно сделать так:
Dim aR1.s(3) aR1(0)="000" aR1(1)="1" aR1(2)="222" aR1(3)="333" For i=0 To 3 *p=PeekI(@aR1()+SizeOf(Integer)*i) Debug PeekS(*p) Next i
Только зачем это понадобилось? Наверняка есть другое, боле стандартное решение.
Хочу поиметь массив массивов разных размерностей
Такие варианты не подходят?
Dim x.b(20, 10) x(2, 4) = 10 Debug x(2, 4)
Structure y Array y.b(10) EndStructure Dim x.y(20) x(2)\y(4) = 10 Debug x(2)\y(4)
Нужда такая. Попробую сформулировать в общем виде.
нужно как-то хранить в памяти несколько строк в каждой из которых некоторое количество элементов
количество строк заранее неизвестно - определяется в процессе обработки данных
количество элементов в каждой строке разное и тоже неизвестно заранее.
Тип элементов - одинаковый - в данном случае UInt
P.S.И простой и быстрый доступ к каждому элементу
Это я учебно-тренировочные программки делаю т.к. увидел Пурик пару недель назад.
Переношу свои утилитки из другой системы.
Там массив разных массивов - удобная фишка.
А тут - еще мозги не перестроил.
Отредактировано SadStar (28.09.2011 05:05:00)
Получил такое сообщение об ошибке
"Только конечный размер Массива можно задать при помощи ReDim"
Долго шизел. Проверял почему у меня бесконечный размер получается.
Пока не догадался переключиться на язык оригинала.
А там
"Only the last dimension of an array can be changed with ReDim"
нужно как-то хранить в памяти несколько строк в каждой из которых некоторое количество элементовколичество строк заранее неизвестно - определяется в процессе обработки данныхколичество элементов в каждой строке разное и тоже неизвестно заранее.
В таком случае, удобно использовать динамически связанный список.
Structure y List y.s() EndStructure NewList x.y() AddElement(x()) AddElement(x()\y()) x()\y() = "Тест" Debug x()\y()
Работа с ним, несколько отличается от работы с массивами, но он дает возможность более гибко управлять числом элементов и содержимым. Это особенно удобно когда неизвестно сколько данных нужно записать в список.
Скажем, чтобы в начало массива что-то добавить или удалить оттуда, пришлось бы программно сдвигать остальные элементы. Со списком такой необходимости нет.
как я понял - ByRef здесь нет. Чтобы вернуть три значения из процедуры пробую использовать массив.
...
Declare.b FindCell(Array A(1))
...
Dim aTemp.l(2) ; для замены ByRef
aTemp(0)=0: aTemp(1)=0: aTemp(2)=0
...
If FindCell(aTemp(1)) ;<< неверный тип: массив ожидался ?????
...
Procedure.b FindCell(Array A.l(1))
...
;--------------------------------------------
ProcedureReturn result
EndProcedure
Почему вылазит эта ошибка?
Почему вылазит эта ошибка?
Вся проблема была в том, что при декларировании процедуры был задан тип массива по умолчанию, а это Integer.
Но фактически, в процедуру передается массив типа Long, поэтому и ошибка.
Declare.b FindCell(Array A.l(1)) Dim aTemp.l(2) ; для замены ByRef aTemp(0)=0: aTemp(1)=0: aTemp(2)=0 If FindCell(aTemp()) ;<< неверный тип: массив ожидался ????? EndIf Procedure.b FindCell(Array A.l(1)) ;-------------------------------------------- ProcedureReturn result EndProcedure
Вы здесь » PureBasic - форум » PureBasic для Windows » как получить элементs массива имея только указатель на массив?