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

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


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


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

Выпуск № 134
от 14.05.2003, 14:50

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


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

Shurik
Статус: Начальный
Общий рейтинг: 125.92
[Подробней >>]
_vt
Статус: Доверительный
Общий рейтинг: 121.25
[Подробней >>]
Pin
Статус: Доверительный
Общий рейтинг: 127.77
[Подробней >>]
 
joe
Статус: Начальный
Общий рейтинг: 133.33
[Подробней >>]
Sensey
Статус: Профессиональный
Общий рейтинг: 121.73
URL: Страничка рассылки по Паскалю
Телефон: +38 (0572) 41-76-04 д.
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.05
[Подробней >>]
 
Bill
Статус: Начальный
Общий рейтинг: 190
[Подробней >>]
Tancho
Статус: Опытный
Общий рейтинг: 149.04
[Подробней >>]


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

Вопрос № 223. здравствуйте уважаемые эксперты..... Вот какой у меня вопрос: Про указатели - var p1,p2: ^integer; ... (ответов: 8)

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


 Вопрос № 223

здравствуйте уважаемые эксперты.....
Вот какой у меня вопрос:
Про указатели -
var
p1,p2: ^integer;
p3:^real;
pp:pointer; - нетипизированный
p1:=p2; - понятно
pp:=p3;- понятно
p1:=pp; - а вот тут несоответствие типов - обьясните по подробнее как на аппаратном уровне это всё будет сходиться
Заранее благодарен



Вопрос отправлен: 11.05.2003, 14:41
Отправитель: _hf (_hf@tut.by)

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

Отвечает Shurik

Добрый день, _hf!
p1,p2 и p3 ссылаются на участки памяти размером в 2(integer) и 4(real) байта соответственно. После pp = p3 pp стал real, а после этого вы integer пытаетесь присвоить real и на это он вполне естественным образом ругается


Ответ отправлен: 11.05.2003, 20:11
Отправитель: Shurik


Отвечает _vt

Здравствуйте, _hf!
На аппаратном уровне нет никаких типов данных, типы данных существуют только в языках высокого уровня. Компилятор подставляет в генерируемый машинный код непосредственные адреса данных, с которыми и работает процессор.


Ответ отправлен: 11.05.2003, 23:34
Отправитель: _vt


Отвечает Pin

Здравствуйте, _hf!
Нетипизированные указатели служат для хранения любого адреса.
p1:=pp; означает установить АДРЕС p1 на значение pp. Само значние не копируется, так что может быть каша!

Ответ отправлен: 11.05.2003, 23:42
Отправитель: Pin


Отвечает joe

Приветствую Вас, _hf!
Нетипизированный указатель - ссылка (т.е. в нём содержится адрес первой ячейки выделенной под него области памяти) на область памяти, в которой может быть всё, что угодно. Типизированный указатель - ссылка на ПЕРЕМЕННУЮ заданного типа.
Вообще обычно не прокатывает присвоение типа
p1^:=pp^; - здесь перменной целого типа присваивается невесть что, а
p1:=pp; должно работать, т.к. здесь присвоение между адресами, а они имеют одинаковый тип

Ответ отправлен: 11.05.2003, 19:18
Отправитель: joe


Отвечает Sensey

Доброе время суток, _hf!
Любой указатель - это 4 байта адреса в формате сегмент:смещение. и не важно, типизированный он или нет.
Просто Паскаль сможет проверить соответствие типов в таком присваивании - и указать на ошибку...
Поэтому это присвоится, но когда ты указатель разадресуешь - получишь чепуху.


Ответ отправлен: 11.05.2003, 15:03
Отправитель: Sensey


Отвечает vitya

Приветствую Вас, _hf!
Указатель это всего лишь адрес в памяти, а что там записанно аппаратуру не интересует. Просто если ты будешь работать с этим указателем там будет не нормальное число, а будет мусор.

Ответ отправлен: 11.05.2003, 14:52
Отправитель: vitya


Отвечает Bill

Добрый день, _hf!
Сам то пробовал? Никакого сигнала о несоответствии компилятор не дает.
Другое дело, что Паскаль оченно типизированный язык. В нем такие одинаковые массивы не одно и то же:
var
a1: array[1..5] of Integer;
a2: array[1..5] of integer;
BEGIN
a1:=a2
Или ошибка в какой то программе... Покажи код


Ответ отправлен: 11.05.2003, 18:06
Отправитель: Bill


Отвечает Tancho

Приветствую Вас, _hf!
На нетипизированный указатель (pp) ты присвоил указатель к
реалнный тип( P3 )- это допустимо так как до этот момент pp не был определен, но... потом хочешь присвоить уже определеного как реального указателя рр на указателя
целого(p1 - integer) типа, а это в Pascal'е запрещено, а
иначе и не можеть быть так как одна променлива целого типа
занимает 2 байта, а одна променлива реального типа 4 байта.
И можешь себе представить если бы это было рарешено какая
путаница можеть настать?
P.S. С указательем могуть ставиться еще 2 операции :
- сравнивания указателей;
- передания указателя как параметр к подпрограму(функции);
Здесь то же указатели надо быть от одного и то типа!

Ответ отправлен: 13.05.2003, 17:26
Отправитель: Tancho



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (40)
C / C++ (31)
Perl (4)
Builder / Delphi (16)
Pascal (30)
Basic / VBA (12)
Java / JavaScript (11)
PHP (5)
MySQL / MSSQL (4)
Пользователю
Windows 95/98/Me (39)
Windows NT/2000/XP (30)
"Железо" (27)
Поиск информации (12)
Администратору
Windows NT/2000/XP (18)
Linux / Unix (9)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (5)
КоАП (4)

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




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


Яндекс цитирования
© 2003 Россия, Москва. Авторское право: RusFAQ.ru

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

В избранное