Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1454867320
JohnKorsh
2016-02-07 20:48
2018.01.14
Как открыть файл только для чтения.


1-1355981373
oren_yastreb
2012-12-20 09:29
2018.01.14
User Unit 5; вызывает ошибку


2-1454258706
ramstain
2016-01-31 19:45
2018.01.14
type record


2-1454046359
gedevan
2016-01-29 08:45
2018.01.14
Можно ли сделать запрос SQL из данных фиктивной таблицы?


2-1454488797
KostaRik
2016-02-03 11:39
2018.01.14
Динамические массивы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский