![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Altair |
![]()
Сообщение
#1
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Код Uses CRT; Const n=2; D:word=12; var a:array[1..n] of integer; b:word absolute n:2; i:word; c:word absolute d; begin ClrScr; readln(b); for i:=1 to b do a[i]:=random(100); for i:=1 to b do write(a[i],' '); writeln; writeln('c='); readln(c); writeln(d); end. Значение константы, используемой для индексации можно безболезненно менять в меньшую сторону. Значение свободной константы можно изменять свободно. Почему значение констант индексирования нельзя менять в большую сторону при сохранении размера переменной в памяти? ответ: массив или строка увеличится, автоматически новая облать памяти попытается обнулиться, а там могут быть данные чужие, и получаем RUN-TIME ERROR. ![]() Если есть подобные примеры работы с директивой absolute, кидайте сюда, может получиться интересная статья в итоге... ЗЫ: Странно, зачем вообще константы в Паскале .... :D -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
xds |
![]()
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Конструкция absolute имеет две синтаксических формы:
1. Код var <идентификатор>: <тип> absolute <переменная>; 2. Код var <идентификатор>: <тип> absolute <сегмент>:<смещение>; В первом виде она используется для размещения переменной с именем <идентификатор> типа <тип> по тому же адресу, что и <переменная>. Пример: Код var a: Integer; c: Byte absolute a; Переменная c размещается по тому жу адресу, что и a, т.е. представляет собой младший байт а. Следует отметить, что по absolute место в сегменте данных не выделяется, и следующий код является ошибочным: Код var c: Byte; a: LongInt absolute c; d: Integer; a выходит за границы участка памяти, выделенного под c, и при записи в a мы в лучшем случае испортим значение d. Во втором виде, она используется для размещения переменной с именем <идентификатор> типа <тип> в памяти по абсолютному (сегментному) адресу <сегмент>:<смещение> (её физический адрес будет равен <сегмент> * 16 + <смещение>, где "*" - операция арифметического умножения, "+" - операция арифметического сложения, а "16" - число в десятичной форме записи ![]() -------------------- The idiots are winning.
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 13:51 |