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
  mdi child form sorunu goabdullah 3 2.590 20-03-2023, Saat: 21:37
Son Yorum: CesuR
  Mysql Büyükten Küçüğe Sıralama Sorunu hakanharbeli 8 3.637 26-01-2023, Saat: 10:35
Son Yorum: yhackup
Exclamation UniDac ile Mobil App Bağlanma Sorunu yemre 20 1.597 13-01-2023, Saat: 09:01
Son Yorum: shooterman
  Delphi 10.2 Aes sorunu seci20 5 2.995 30-11-2022, Saat: 08:47
Son Yorum: hi_selamlar
  Activex Mediaplayer sıralı çalma sorunu baloglurecep 0 175 24-11-2022, Saat: 01:52
Son Yorum: baloglurecep



Konuyu Okuyanlar: 1 Ziyaretçi