![]() |
|
|
|
|
#1
|
||||
|
||||
|
Вот что-то путаю PChar и указатели, помогите разобраться
Код:
var
Form1: TForm1;
Str:string;
p:PChar;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=str; {в этой процедуре на кнопку нажимаешь в Edit1 пропадает все, что вводишь и в Edit2 ничего нет, и ошибок нет (не понятно)}
P:=@str;
Edit2.Text:=String(p^);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Str:=Edit1.Text;
New(p);
p^:=str; //Здесь ошибку выдает почему-то
Edit2.Text:=String(p^);
Dispose(p);
end;Почему так происходит ??? Последний раз редактировалось Admin, 16.09.2009 в 21:34. |
|
#2
|
||||
|
||||
|
Код:
var
Form1: TForm1;
Str:string;
p:PChar;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=str; {в этой процедуре на кнопку нажимаешь в Edit1 пропадает все, что вводишь и в Edit2 ничего нет, и ошибок нет (не понятно)}
// А что ты хотел? ты ж едиту присваиваешь значение строки, которая не инициализированная.
/// P:=@str; <-- нафига???
P:=PChar(str);
/// Edit2.Text:=String(p^); <-- нифига.
Edit2.Text:=p;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Str:=Edit1.Text;
///New(p);
///p^:=str; //Здесь ошибку выдает почему-то
// никаких преобразований тут нифига не надо.
p:=str;
///Edit2.Text:=String(p^);
Edit2.Text:=p;
///Dispose(p);
end; |
|
#3
|
||||
|
||||
|
Парни объясните как работает тип PChar в нете либо многоо
не написано либо нанписано но я не понимаю. Ответьте на предыдущие вопросы только скажите 'почему', а не как надо, потому что я хочу понять. Вот здесь например почему в P присваевается слово привет, ведь мы присваеваем только адрес??? Код:
const SHello: array[0..7] of Char = 'Привет!'#0;
var
Form1: TForm1;
P:PChar;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
P := @SHello;
ShowMessage (P);Да, еще я не учусь на программиста, только готовлюсь, так что мне не у кого спросить,а в нете не понимаю, застрял на этом PChar, так что извините, если надоедаю !!! Последний раз редактировалось Admin, 18.09.2009 в 17:38. |
|
#4
|
|||
|
|||
|
Потому что PChar - это есть указатель на массив символов, заканчивающихся нулем. А Дельфя сама понимает этот тип и не требует "разименовывания" указателей в большинстве случаев, за исключением некоторых специальных. Более того, ты можешь написать так:
Код:
var
P : PChar;
begin
P := PChar('bla-bla-bla');
end;И это тоже сработает. |
|
#5
|
||||
|
||||
|
Код:
Читаю Флемова Тип PChar нельзя использовать напрямую, потому что это указать на память. По этому указателю должны быть выделена какая-то область памяти. Это значит, что следующий пример будет недействителен: var s:PChar begin s:=’Привет’; end; В этом примере я объявил строку s типа PChar и пытаюсь присвоить ей текст. Такая операция невозможна, потому что s – указатель и ни на что не указывает. Но пример работает, как это понимать ??? Кстати, последнее китайское сработало !!! |