Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.04.2010, 22:37
-=Slayer=- -=Slayer=- вне форума
Прохожий
 
Регистрация: 06.02.2008
Сообщения: 7
Репутация: 10
По умолчанию Проблема с указателями

Два года с Delphi и до сих пор не использовал указатели в программах, не ощущая их необходимости. Только сейчас решил восполнить пробелы в образовании. Купил книгу Меженного и столкнулся с проблемой в компиляции примера из его книги

Цитата:
program Project1;

{$APPTYPE CONSOLE}

uses
Windows,Classes,SysUtils,Dialogs;

var
px,py: pointer;
begin
GetMem(px,SizeOf(char));
GetMem(py,SizeOf(integer));

px^:='A';
py^:=7;

//ShowMessage(Char(px));

FreeMem(px,SizeOf(char));
FreeMem(py,SizeOf(integer));

WriteLn;
ReadLn;
end.

Получаю ошибку на строке px^:='A'; и следущей
Цитата:
[DCC Error] Project1.dpr(19): E2015 Operator not applicable to this operand type

Что-то с типами данных. Не получается просто так присваивать нетипизированным переменным значения, хотя память выделяется верно. Пробовал в dev-pascal. Получил примерно то же самое. Можно ли присваивать нетипизированным переменным значения напрямую?
Ответить с цитированием
  #2  
Старый 13.04.2010, 01:21
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Вот в таком варианте работает:
Код:
var
  px: PChar;
  py: PInt;
begin
  GetMem(px,SizeOf(char));
  GetMem(py,SizeOf(integer));

  px^:='A';
  py^:=7;

  ShowMessage(px^);

  FreeMem(px,SizeOf(char));
  FreeMem(py,SizeOf(integer));
end;
Исправил также строку "ShowMessage"

Вот так тоже работает (удалил FreeMem, т.к. это вызывает ошибку):
Код:
var
  px: pointer;
  AChar: Byte;
begin
  GetMem(px,SizeOf(char));

  AChar:= Ord('A');
  px:=@AChar;

  ShowMessage(Char(px^));
end;

Последний раз редактировалось AlexSku, 13.04.2010 в 01:29.
Ответить с цитированием
  #3  
Старый 13.04.2010, 15:09
-=Slayer=- -=Slayer=- вне форума
Прохожий
 
Регистрация: 06.02.2008
Сообщения: 7
Репутация: 10
По умолчанию

Да, присваивание адресов переменных работает.
px: PChar - это уже типизированные указатели почти что получаются и удобнее тогда использовать их так: px: ^char; И в таком случае это даже рациональнее, так как вместо GetMem(px,SizeOf(Char)) нужно воспользоваться конструкцией New(px);

Пробовал в Pascal, тоже не работает этот пример. Странно, что он попал в учебник, на котором написано, что это самоучитель №1, хотя по содержанию он в целом действительно неплох.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter