Форум: "Начинающим";
Текущий архив: 2018.01.14;
Скачать: [xml.tar.bz2];
ВнизДинамические массивы Найти похожие ветки
← →
KostaRik © (2016-02-03 11:39) [0]Здравствуйте, господа форумчане! Мой вопрос почему-то удалили, но я спрошу еще раз.
Если:
я создаю запись
Код:
type some_type=record
x:integer;
y:integer;
и тип указателя на запись
Код:
type Psome_type=^some_type;
некоторую переменную
Код:
var arr:Psome_type;
i:integer;
И создаю массив
Код:
GetMem(arr, 10*sizeof(some_type));
Как мне получить значение, находящееся по адресу arr[ i ] в Turbo Pascal 7.0, кроме способа с инкрементом указателя до места назначения? Неужели в Паскале нет адекватного способа работы с адресами? Мне никто не может ответить на этот вопрос уже месяц.
Всем заранее спасибо!
← →
RWolf © (2016-02-03 12:04) [1]
type
TSomeTypeArray = array [0..999] of some_type;
var
p: Psome_type;
a: TSomeTypeArray absolute p;
begin
GetMem(p, 10 * sizeof(some_type));
Writeln(a[1].x);
end.
← →
кгшзх © (2016-02-03 12:10) [2]адекватных операций с адресами всего две: сложение и вычитание.
какие тебе еще нужны операции с адресами?
для индексного же обращения к памяти нужны массивы.
но ты же сам от них отказался в пользу своего лисапета.
← →
RWolf © (2016-02-03 12:12) [3]
> [1]
хотя нет, absolute p — это адрес самого указателя, так что не сработает.
← →
Dimka Maslov © (2016-02-03 18:30) [4]type
TSomeRec = record
X, Y: Integer;
end;
PSomeRecArray = TSomeRecArray;
TSomeRecArray = array[0..1000] of TSomeRec;
var
arr: PSomeRecArray;
begin
GetMem(arr, 10 * SizeOf(TSomeRec));
a[0].X := 100;
a[9].Y := 200;
end;
И будет щастие.
← →
KilkennyCat © (2016-02-03 22:04) [5]и утечка.
← →
Германн © (2016-02-04 01:35) [6]
> Неужели в Паскале нет адекватного способа работы с адресами?
>
Не знаю какие способы вы считаете адекватными. Но в Паскале исторически не принято "работать с адресами в памяти".
← →
icWasya © (2016-02-05 13:53) [7]>И будет щастие.
>KilkennyCat © (03.02.16 22:04) [5]
>и утечка.
Насчёт утечки - поподробнее: откуда она возьмётся?
← →
Dimka Maslov © (2016-02-05 14:51) [8]
> откуда она возьмётся?
От отсутствия FreeMem и/или блока try..finally
> Но в Паскале исторически не принято "работать с адресами
> в памяти".
В Турбо Паскале исторически был "массив" mem для прямого и безусловного доступа к памяти через пару сегмент-смещение.
← →
Германн © (2016-02-06 00:21) [9]
> Dimka Maslov © (05.02.16 14:51) [8]
Так это только в DOS"е. И только по явно заданному адресу.
← →
Dimka Maslov © (2016-02-08 10:37) [10]
> Так это только в DOS"е.
На то там и ключевое слово "Турбо".
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2018.01.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.001 c