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

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


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

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

Выпуск № 308
от 07.07.2004, 22:00

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


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

vova#
Статус: Начальный
Общий рейтинг: 161.53
[Подробней >>]
Strory
Статус: Опытный
Общий рейтинг: 155.73
URL: МУАТ
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 116.68
[Подробней >>]
 
КиберТварь
Статус: Начальный
Общий рейтинг: 173.68
[Подробней >>]
Boriss
Статус: Профессиональный
Общий рейтинг: 161.88
URL: Программирование на Паскале
[Подробней >>]
Student
Статус: Начальный
Общий рейтинг: 153.84
[Подробней >>]
 
sir henry
Статус: Профессиональный
Общий рейтинг: 164.58
[Подробней >>]


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

Вопрос № 502. Здравствуйте,Эксперты! Подскажите, пожалуйста, почему нужно делать так: TPtrType=^TType; TType=recor... (ответов: 7)

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


 Вопрос № 502

Здравствуйте,Эксперты!
Подскажите, пожалуйста, почему нужно делать так:
TPtrType=^TType;
TType=record
Data:integer;
ptr:TPtrType;
end;
А не, например, так:
TType=record
Data:integer;
ptr:pointer;
end;
Теоретическая разница ясна, а вот практическая...



Вопрос отправлен: 04.07.2004, 21:59
Отправитель: RedHamster

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

Отвечает vova#

Здравствуйте, RedHamster!
Указатели... Сие есть - указатели. Жалко конечно, что так мало сведений, но по тому, что есть видно следующее: TPtrType=^TType ты указываешь тип TPtrType, как указатель, который может указывать на область памяти для записи переменных типа TType, далее идет описание TType, там сново ptr описывается, как TPtrType, следовательно указатель сново указывает на следующую запись того же типа... Прикольно конечно, что TPtrType описывается прежде, чем TType... Но пусть тебя это не смущает, данная конструкция такое позволяет (указатели все-таки)... Второй же твой случай конечно отличается. Там не используются указатели, переменная TType описана совсем иначе: Date:integer и ptr:pointer...

Ответ отправлен: 05.07.2004, 17:40
Отправитель: vova#


Отвечает Strory

Доброе время суток, RedHamster!
В первом случае указатель указывает (извините за каламбур) на следующую элемент (в данном случае - запись) и Вам не придётся самому висчитывать (как во втором случае) тип (занимаемое место в памяти) элемента. Короче, удобнее.

Ответ отправлен: 05.07.2004, 11:04
Отправитель: Strory


Отвечает Ayl

Доброе время суток, RedHamster!
Почему нельзя? Можно и так. Просто усложнится обращение по указателю. Ты уже не сможешь просто так написать ptr^, тебе придется указывать тип. Оп-па... А типа-то у тебя и нет. Значит, придется извращаться. Хотя если у тебя в список будут включаться элементы разных типов, то второй подход наиболее правильный. А первый для списков с элементами одного типа наиболее удобен.


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


Отвечает КиберТварь

Здравствуйте, RedHamster!
что б конкретно указать размер нового объекта

Ответ отправлен: 05.07.2004, 08:43
Отправитель: КиберТварь


Отвечает Boriss

Приветствую Вас, RedHamster!
Просто POINTER, он и в Африке указатель, а Вам нужна информация о структуре записи (record) - поэтому и TPtrType (а лучше обозначать PPtrType !!!).
Кстати, если TPtrType размесите в динамической памяти с помощью GetMem - она "потеряет" информацию о стурктуре записи, - только New сохраняет ее

Ответ отправлен: 05.07.2004, 11:21
Отправитель: Boriss


Отвечает Student

Добрый день, RedHamster!
В первом примере переменная ptr указывает на переменную типа TPtrType, то есть в ней уже содержитс адрес переменнной типа запись. А во втором примере переменная ptr тоже является переменной типа указатель, но ни на что не указывает, т.к. ей не присвоен никакой адрес.

Ответ отправлен: 06.07.2004, 08:37
Отправитель: Student


Отвечает sir henry

Добрый день, RedHamster!
Поскольку Паскаль - это все таки типизированый язык, то логически можно дойти и до практической стороны :)).
Элемент ptr должен указывать не вообще в пространство (как это было бы с типом pointer), а конкретно на следующий элемент ВПОЛНЕ ОПРЕДЕЛЕННОГО ТИПА. В Вашем случае это TPtrType.
Давайте представим, что Вы у второго элемента записи указали тип вместо TPtrType - pointer. В этом случае Вы можете присваивать этому указателю любой участок памяти, а не тот, что Вам нужен (т.е. TPtrType).
Если же мы поставим TPtrType, то этот указатель может указывать только на следующий участок памяти, где расположен именно TPtrType, а не вообще какая-нибудь колбаса.
Как видите и теоретические изыски иногда бывают направлены в практическое русло :).

Ответ отправлен: 05.07.2004, 06:01
Отправитель: sir henry



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

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

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




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


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

http://subscribe.ru/
E-mail: ask@subscribe.ru
Адрес подписки
Отписаться

В избранное