Здравствуйте, уважаемые эксперты. В приложении, а - это переменная типа "указатель на запись" rec (если я не ошибаюсь...). Объясните пожалуйста, что из себя представляет a^ (и temp^) ? Заранее благодарен.
Добрый день, Ученик-мученник! Не ошибаетесь :) А 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.