Passing Struct Pointers to Functions

Kategori: C , 23 Haziran 2019 , JanFranco


Normalde structure yapısının elemanlarına nokta (.) operatörü ile erişiyorduk. Eğer bir pointer-structure tanımladıysak elemanlarına -> operaötrü ile erişebiliriz. Diğer işlemleri örnek üzerinden anlatmak gerekirse:

struct myStruct{
    int number1;
    float number2;
};

void assignNumbers(struct myStruct *p){
    p->number1 = 5;
    p->number2 = 12.8;
}

int main(){
    struct myStruct s;
    assignNumbers(&s);
    printf("%d %f", s.number1, s.number2);
    return 0;
}

Burada myStruct adında bir struct oluşturduk ve içinde bir integer bir de float tipinde iki değişken sakladık. assignNumbers adında bir fonksiyon oluşturduk ve parametresini struct-pointer ayarladık. Bu fonksiyon kendisine verilen structure'ın number1 ve number2 değerlerini 5 ve 12.8 olarak değiştirmekte. main fonksiyonunda struct myStruct tipinde ve s adında bir structure oluşturduk ve fonksiyona bu s struct'ının adresini yolladık. Daha sonra fonksiyonda s struct'ının elemanlarına sayıları atamış olduk ve ekrana bastırdık.

Direk bir structure gönderip değerlerini değiştirip return edebilirdik. Neden pointerları kullandık diye sorabilirsiniz. Bunun en temel nedeni hızı önemsememizdir. Fonksiyonlar çağırıldığında gönderdiğimiz parametrelerin bir kopyası oluşturulur ve o kopyalar üzerinde işlemler yapılır. Düşünelim ki bir structure oluşturduk ve içinde long long tipinde 1.000.000 değişken var. Bunu parametre olarak gönderdiğimizde, boyutu yüksek olan tüm bu değişkenlerin kopyası oluşacaktır. O kopyalar üzerinde işlemler yapılacak ve return etmemiz gerecekti. Düşündüğümüzde bunun çok büyük bir hız kaybı olduğunu görebiliriz. Bu sorunu 1.000.000 değişkenli structure göndermek yerine, bu structure'ın adresini vererek çözebiliriz.


Sonraki Yazı: Arrays
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın