|
#1
|
||||
|
||||
PChar
Вот что-то путаю 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; Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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 – указатель и ни на что не указывает. Но пример работает, как это понимать ??? Кстати, последнее китайское сработало !!! |