Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 297
от 04.06.2004, 17:10

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 491
Отправлено ответов: 1824
Активность: 371.4 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Snowm@n
Статус: Опытный
Общий рейтинг: 112.13
[Подробней >>]
samum2000
Статус: Профессиональный
Общий рейтинг: 129.98
URL: Samums home page
[Подробней >>]
Student
Статус: Начальный
Общий рейтинг: 160
[Подробней >>]
 
CrackLab
Статус: Опытный
Общий рейтинг: 138.65
[Подробней >>]
sir henry
Статус: Профессиональный
Общий рейтинг: 162.77
[Подробней >>]
Boriss
Статус: Профессиональный
Общий рейтинг: 163.56
URL: Программирование на Паскале
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 116.64
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 491. Здравствуйте, уважаемые эксперты. В приложении, а - это переменная типа "указатель на запись&qu... (ответов: 7)

Вопросов: 1, ответов: 7


 Вопрос № 491

Здравствуйте, уважаемые эксперты.
В приложении, а - это переменная типа "указатель на запись" rec (если я не ошибаюсь...).
Объясните пожалуйста, что из себя представляет a^ (и temp^) ?
Заранее благодарен.


Приложение:


Вопрос отправлен: 01.06.2004, 17:06
Отправитель: Ученик-мученник

[Следующий вопрос >>] [Список вопросов]

Отвечает Snowm@n

Добрый день, Ученик-мученник!
Не ошибаетесь :)
А a^(temp^) - это и есть та самая запись на которую указывает a(temp), т.е. лежит по адресу, который содержится в этом указателе, но в Паскале заменяется символьным именем для удобства. Советую вам почитать литературку про связные списки (например PGTP6 (руководство программиста к TP6))



Ответ отправлен: 01.06.2004, 20:59
Отправитель: Snowm@n


Отвечает samum2000


Приветствую Вас, Ученик-мученник!
a - это указатель на переменную, расположенную в куче.
a^ - это значение этой переменной (а temp^ - значение переменной temp).
--------------------------
-=Experts helper: testmode=-

Ответ отправлен: 03.06.2004, 11:51
Отправитель: samum2000


Отвечает Student

Приветствую Вас, Ученик-мученник!
a^ это сама переменная rec
С ув. Student.


Ответ отправлен: 01.06.2004, 21:32
Отправитель: Student


Отвечает CrackLab

Здравствуйте, Ученик-мученник!
Вам нужно почитать про указатели. Оператор ^ используется для работы с указателями. Указатель на объект - это адрес, по которому в памяти находится данный объект. Например мы можем объявить нашу структуру так:
temp : rec;
а можем так:
temp : ^rec;
В первом случае temp непосредственно ведет к записи rec (которая кажется будет находится в стеке).
Во втором случае temp ведет к адресу, который указывает на местоположения записи rec в памяти.
Когда мы работаем с указателем на запись например, то для доступа к членам записи мы уже не можем написать:
rec.name := "Ivan"; // Неправильно
А мы должны использовать оператор разыменования - ^ справа.
Тогда мы получим доступ непосредственно к члену записи:
rec^.name := "Ivan" // Правильно
В данном случае а и temp - указатели на запись rec. Поэтому для доступа к их членам используется оператор разыменования (^ справа)
Возможно вам мало что понятно из моего объяснения, потому что обычно указатели бросают новичков в ужас и непонимания, но я не могу писать вам целую главу по работе с указателями, поэтому советую прочитать про указатели в какой-нибудь книге по Pascal'ю.

Ответ отправлен: 01.06.2004, 22:01
Отправитель: CrackLab


Отвечает sir henry

Приветствую Вас, Ученик-мученник!
a - это переменная-указатель или, проще говоря, место в памяти где хранится переменная типа uk. a^ - это значение, взятое по адресу a. Значение адреса можно получить написав @a, а данные которые хранятся по этому адресу - a^.

Ответ отправлен: 02.06.2004, 00:59
Отправитель: sir henry


Отвечает Boriss

Приветствую Вас, Ученик-мученник!
rec - это описание новой переменной, из каких составляющих она состоит: строка и указатель на переменную такого типа, как она. Указатель - это четыре байта, в Паскале = сегмент и смещение, которые УКАЗЫВАЮТ на какую-то область в оперативной памяти компьютера.
uk = ^rec - создается новый специализированный тип переменной типа указатель, который может указывать на ту новую переменную.
Но они еще ни на что не указывают. Как, например, Integer - это тип переменной, но значения у него нет
VAR A, TEMP: UK; в памяти компьютера размещаются, создаются две переменные - указатели на "новый" тип. Но работать с ними еще нельзя. Нужно занять место под саму переменную типа REC (чувствуете разницу: можно показать на кого-то и сказать, что это Петров, но не означает, что Петров находится на кончике Вашего пальца).
Занимает место под переменную процедура NEW. Она "посмотрит", как Вы определили указатель и сделает все остальное. Вам останется только пользоваться, а это, как понимаю, уже другой вопрос :)))

Ответ отправлен: 02.06.2004, 12:34
Отправитель: Boriss


Отвечает Ayl

Здравствуйте, Ученик-мученник!
Не совсем так. То есть, если исходить из синтаксиса, то да, a и temp - это указатели на запись rec, соответственно, a^ и temp^ - это, собственно, сами данные типа rec.
Но из семантики определения типа rec следует, что этот тип представляет из себя связанный однонаправленный список. А именно, каждый элемент (узел) содержит в себе указатель на следующий элемент.
То есть, операция temp := a^.next приводит к тому, что a указывает на текущий узел списка, а temp - на следующий за a. Далее, присваивание a^ := temp^ приводит к тому, что в узел a копируется полностью узел temp.
Судя по всему, с помощью этой последовательности команд производится удаление узла из списка. Правда, не очень оптимально. По идее, следующей командой должна быть dispose (temp).
В Приложение постараюсь проиллюстрировать эту идею.


Приложение:

Ответ отправлен: 02.06.2004, 13:27
Отправитель: Ayl



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (20)
C / C++ (14)
Builder / Delphi (15)
Pascal (19)
Basic / VBA (2)
Java / JavaScript (4)
PHP (12)
Криптография (7)
WinAPI (9)
Радиоэлектроника (9)
Пользователю
Windows 95/98/Me (33)
Windows NT/2000/XP (48)
"Железо" (29)
Поиск информации (16)
Администратору
Windows NT/2000/XP (21)
Linux / Unix (7)
Юристу
Гражданское право (12)
Семейное право (9)
Трудовое право (12)
КоАП (8)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное