Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Pointer sorunu
#1
Merhaba, pointer kullanmak konusunda yeniyim ve ne yaptığımı tam olarak bilmiyorum. Free Pascal (Lazarus) kullanıyorum. Aşağıdaki kodda hatalı olan nedir?

procedure TMain.DoRun;
var
 ...
 Str                 : String;
 ArtistPtr           : ^String;
 DurationPtr         : ^String;
 BpmPtr              : ^String;
 KeyPtr              : ^String;
 PriorityPtr         : ^String;
begin
   Str:='';
 
   ArtistPtr :=Nil;
   ArtistPtr:=@Str;
 
   DurationPtr :=Nil;
   DurationPtr:=@Str;
 
   BpmPtr :=Nil;
   BpmPtr:=@Str;
 
   KeyPtr :=Nil;
   KeyPtr:=@Str;
 
   PriorityPtr :=Nil;
   PriorityPtr:=@Str;
 
   ...
   ArtistPtr^:=GetTagFromFile(P, 'TAG:artist');
   ...
   
Cevapla
#2
(02-12-2022, Saat: 00:14)onurcan1977 Adlı Kullanıcıdan Alıntı: Merhaba, pointer kullanmak konusunda yeniyim ve ne yaptığımı tam olarak bilmiyorum. Free Pascal (Lazarus) kullanıyorum. Aşağıdaki kodda hatalı olan nedir?

procedure TMain.DoRun;
var
 ...
 Str                 : String;
 ArtistPtr           : ^String;
 DurationPtr         : ^String;
 BpmPtr              : ^String;
 KeyPtr              : ^String;
 PriorityPtr         : ^String;
begin
   Str:='';
 
   ArtistPtr :=Nil;
   ArtistPtr:=@Str;
 
   DurationPtr :=Nil;
   DurationPtr:=@Str;
 
   BpmPtr :=Nil;
   BpmPtr:=@Str;
 
   KeyPtr :=Nil;
   KeyPtr:=@Str;
 
   PriorityPtr :=Nil;
   PriorityPtr:=@Str;
 
   ...
   ArtistPtr^:=GetTagFromFile(P, 'TAG:artist');
   ...
   


en basit yalın haliyle anlatmak gerekirse..


ArtistPtr:=@Str;

Yukarda yazdığınız kod ile başına "@" ekleyerek Str'nin adresini ArtistPtr işaretçisine yüklemiş oldunuz.


Basit bir proje oluşturun bir buton ekleyip şu kodu deneyebilirsiniz

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  p: ^string;
begin
  //s değişkeninin içerisine delphican yükledik
  s := 'delphican';

  //s'nin adresini işaretçiye(pointer'a) yükle
  p := @s;

  //işaretçiye atanan adresteki verileri çağır. (çıktı: delphican)
  ShowMessage('1. p^ = ' + p^);

  //işaretçide bulunan adresteki verileri değiştir
  p^ := 'arm';

  //Değiştirilen verileri göster (çıktı: arm)
  ShowMessage('2. p^ = ' + p^);

  //peki s değişkeninin değeri ne oldu  (çıktı: arm)
  ShowMessage('3. s = ' + s);
end;

s değişkenine sadece birkez "delphican" değerini tanımlamamıza rağmen.
son ShowMessage da sonuç "arm" olarak değişmiş olacak.
çünkü işaretçi üzerinden veriye eriştik. (--->  p^ := 'arm'; )


Güzel bir kaynak
https://docwiki.embarcadero.com/RADStudi...s_(Delphi)
SRHT
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Cas Terazi Veri gönderimi Delphi sürüm sorunu KUNTAY 12 4.300 08-11-2023, Saat: 00:06
Son Yorum: berkan
  TCMB Kur Almada Explorer Sertifika Sorunu Adem Kurt 3 580 24-10-2023, Saat: 15:14
Son Yorum: RAD Coder
  program exe icon sorunu cvheneburi 9 2.726 19-10-2023, Saat: 15:04
Son Yorum: harunyl
  TThread.Synchronize çalışmama sorunu muratmutlu 3 587 10-10-2023, Saat: 12:16
Son Yorum: Tuğrul HELVACI
  FastReport detail tablo gösterim sorunu Frrst 12 1.730 14-07-2023, Saat: 17:10
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi