Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Delphi => Konuyu başlatan: z - 05 Ocak 2022, 19:20:19

Başlık: fonksiyona pointer adresi yollama
Gönderen: z - 05 Ocak 2022, 19:20:19
Bir fonksiyona array adresi yollamak istiyorum ama beceremedim.

Yapmak istedigim

Global degiskenlerim

a: array [0..10] of real;
b: array [0..10] of real;
c: array [0..10] of real;

yazmak istedigim fonksiyon x[0]=x[1] islemini yapacak;

Fonksiyonu mesela a arrayi icin cagiracagim bunun icin fonksiyona a[0] adresi yollayacagim.

Bu is nasil yapilir?

Fonksiyonu ve nasil cagrilacagini yazabilirmisiniz.



Başlık: Ynt: fonksiyona pointer adresi yollama
Gönderen: z - 05 Ocak 2022, 20:13:50
Fonksiyona adres parametresini global degisken uzerinden bildirirsem sorum yok ama fonksiyona parametre yollamaya calisirsam bir turlu kabul ettiremiyorum.
Ayrica pointer degerini inc ve dec ile artirip azaltmak da hosuma gitmiyor.

Global degiskenle su sekilde cozdum.

a:array [0..10] of  real;

p:^real;

function Tasi():real;
{
    inc(p);            // Bu isleme gerek olmadan da yapabilmem lazim
    result:=p^;
    dec(p);            // Bu isleme gerek olmadan da yapabilmem lazim
    p^:=result;
}

Cagirirken;

        p:=@a;
        Tasi(); // p[0]=p[1]

Başlık: Ynt: fonksiyona pointer adresi yollama
Gönderen: z - 05 Ocak 2022, 21:03:27
Bu sekilde oldu ama inc ve dec'dan da kurtulmam lazim.

function Tasi(a: pointer):real;
var p: ^real;
begin
         p:=a;
         inc(p);
         result:=p^;
         dec(p);
         p^:=result;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
        a[1]:=2.8;
        Tasi(@Ia);
end;
Başlık: Ynt: fonksiyona pointer adresi yollama
Gönderen: power20 - 05 Ocak 2022, 21:10:32
Edit
Başlık: Ynt: fonksiyona pointer adresi yollama
Gönderen: power20 - 05 Ocak 2022, 21:18:56
Fonksiyona diziyi parametre olarak girmek:

https://stackoverflow.com/questions/714456/how-do-you-pass-an-array-by-reference-in-delphi
Başlık: Ynt: fonksiyona pointer adresi yollama
Gönderen: z - 05 Ocak 2022, 21:20:56
Cok basit sekilde hallettim. Pointera falan gerek kalmadi

function Tasi(var n: array of real):real;
begin
         n[0]:=n[1];
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
        a[1]:=2.8;
        Tasi(a);
end;
Başlık: Ynt: fonksiyona pointer adresi yollama
Gönderen: power20 - 05 Ocak 2022, 21:24:32
Evet, fonksiyon parametresi önüne var kelimesi ekleyince Fonksiyon dışındaki değişken kastedilmiş oluyor. Bu sayede global değişken veya başka fonksiyon içindeki değişken kullanılabiliyor