PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » как получить элементs массива имея только указатель на массив?


как получить элементs массива имея только указатель на массив?

Сообщений 1 страница 9 из 9

1

Dim aR1.s(3)
aR1(0)="000"
aR1(1)="1"
aR1(2)="222"
aR1(3)="333"

PrintN(Str(@aR1())) ; здесь число=указатель

p.q=@aR1()

что можно сделать дальше?

0

2

SadStar написал(а):

что можно сделать дальше?

Можно сделать так:

Код:
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

Только зачем это понадобилось? Наверняка есть другое, боле стандартное решение.

0

3

Хочу поиметь массив массивов разных размерностей

0

4

Такие варианты не подходят?

Код:
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)

0

5

Нужда такая. Попробую сформулировать в общем виде.
нужно как-то хранить в памяти несколько строк в каждой из которых некоторое количество элементов
количество строк заранее неизвестно - определяется в процессе обработки данных
количество элементов в каждой строке разное и тоже неизвестно заранее.
Тип элементов - одинаковый - в данном случае UInt

P.S.И простой и быстрый доступ к каждому элементу

Это я учебно-тренировочные программки делаю т.к. увидел Пурик пару недель назад.
Переношу свои утилитки из другой системы.
Там массив разных массивов - удобная фишка.
А тут - еще мозги не перестроил.

Отредактировано SadStar (28.09.2011 05:05:00)

0

6

Получил такое сообщение об ошибке
"Только конечный размер Массива можно задать при помощи ReDim"
Долго шизел. Проверял почему у меня бесконечный размер получается.
Пока не догадался переключиться на язык оригинала.
А там
"Only the last dimension of an array can be changed with ReDim"
:(

0

7

SadStar написал(а):

нужно как-то хранить в памяти несколько строк в каждой из которых некоторое количество элементовколичество строк заранее неизвестно - определяется в процессе обработки данныхколичество элементов в каждой строке разное и тоже неизвестно заранее.

В таком случае, удобно использовать динамически связанный список.

Код:
Structure y
  List y.s()
EndStructure

NewList x.y()

AddElement(x())
AddElement(x()\y())
x()\y() = "Тест"
Debug x()\y()

Работа с ним, несколько отличается от работы с массивами, но он дает возможность более гибко управлять числом элементов и содержимым. Это особенно удобно когда неизвестно сколько данных нужно записать в список.
Скажем, чтобы в начало массива что-то добавить или удалить оттуда, пришлось бы программно сдвигать остальные элементы. Со списком такой необходимости нет.

0

8

как я понял - 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

Почему вылазит эта ошибка?

0

9

SadStar написал(а):

Почему вылазит эта ошибка?

Вся проблема была в том, что при декларировании процедуры был задан тип массива по умолчанию, а это 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

0


Вы здесь » PureBasic - форум » PureBasic для Windows » как получить элементs массива имея только указатель на массив?