Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 11:36   #1
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию Вопросы по Pchar

Здравствуйте. В книге встретил такой вывод, что следующий код будет неправильный:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var p:pchar;
begin
 p:='sdfg';
 label1.Caption:=p;
end;
Но при нажатии на кнопку всё работает нормально. Почему делфи не ругается, когда я в переменную PChar присваиваю текстовое значение, ведь PChar - это указатель на начало строки в памяти?
Aleksey1989 вне форума Ответить с цитированием
Старый 12.12.2010, 12:55   #2
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

может потому, что автоматически этому указателю присваиваются все адреса символов строки, т.е. первого символа, потом увеличился указатель, и опять по циклу, а при выводе, извлекаются. По экспериментируйте. При отладке посмотрите, что в p храниться.
P.S. сейчас сам проверил. В переменной хранится строка. Т.е. мое предположение ещё одно. Что когда так делаем, то просто PChar работает как стринг.
Ещё сейчас попробовал
Цитата:
s:='afas';
p:=@s[2];
Переменная получила все значения строки со второго символа. Все понятно теперь.

Цитата:
s:='afas';
p:=@s[1];
inc(p);
inc(p);
inc(p);
S имеет начальный адрес: $1402B6C
p:получает адрес первого символа из S:$1402B6C
увеличили p, адрес: $15C2B6E
увеличили p, адрес: $15C2B70
увеличили p, адрес: $15C2B72
От сюда следует, что адреса 1-го и остальных идут не по порядку, а только после 1-го как и положено по размеру PWideChar =
2 байта (Delphi 10)
при простом присвоении p:='asffg';
первый символ имеет адрес:$4B332C
2-й $4B332E
3-й $4B3330
4-й $4B3332
Т.е. несколько по-другому хранится все. Какой может быть от этого вред, я не знаю. Вывод: наверное и так и так правильно. Но мне тоже интересно, что скажут профессионалы об этом.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 12.12.2010 в 13:21.
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PChar Superlotles Помощь студентам 15 09.10.2009 10:16
Эквивалент \n в PChar VladimirVB Общие вопросы Delphi 1 28.08.2009 13:46
PChar Роман Радер Общие вопросы Delphi 2 02.11.2008 18:50
Access violation на строке вида StrLCopy(PChar(st1),PChar(st2),10); malor Общие вопросы Delphi 1 11.07.2007 13:39
Добавление к pchar EdNovice Общие вопросы Delphi 2 15.04.2007 17:00