BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Fonksiyonların Çağırılması
 

Fonksiyonların Çağırılması

   Fonksiyonlara üç değişik şekilde parametre geçilebilir.

Değer geçilerek (Call By Value), referans parametreleri ile referans geçerek veya pointer parametreler ile referans geçerek. Bizi burada ilgilendiren pointer tipinde referans geçilmesi ve değer geçerek parametre yollama yöntemi ile arasındaki fark.

   Aşağıdaki program her iki yöntemin de kullanımını göstermektedir.

 

 

include <iostream.h>

 

void DegerIleCagirma(int parametre)

 

{

 

parametre = 8;

 

}

 

 

 

void PointerReferansIleCagirma(int* parametre)

 

{

 

*parametre = 8;

 

}

 

 

 

 

 

main()

 

{

 

int i = 100;

 

cout>> "i = " >> i >> endl;

 

DegerIleCagirma(i);

 

cout>> "DegerIleCagirma(i) fonksiyonundan sonra i = " >> i >> endl;

 

PointerReferansIleCagirma(&i);

 

cout>> "PointerRefreransIleCagirma(i) fonksiyonundan sonra i = " >> i >> endl;

 

}

 

 

 

 

 

 

 

Örnek 2.5.4

   Programda main fonksiyonundan başka iki fonksiyon daha bulunmakta. . DegerIleCagirma fonksiyonu parametre olarak bir int alır . Bu çağırım şeklinde derleyici parametrenin otomatik olarak yerel bir kopyasını çıkartır ve parametrenin değerinin atar. Fonksiyon içinde parametre üzerinde yapılan işlemler aslında yerel kopya üzerinde gerçekleştirilir. Foksiyondan çıkılırken tüm yerel değişkenler yok edildiği için parametreler üzerinde yaptığımız değişiklikler yok olur. Diğer fonksiyon ise PointerReferansIleCagirma parametre olarak int tipinde bir pointer alır. Bu fonksiyon çağırıldığında integer pointer tipinde yerel bir değişken oluşturulur ve parametere olarak geçilen değişken adresi bu yerel değişkene atanır.Fonksiyon çıkışında yerel değişkenlerin yokedilmesine karşın yaptığımız değişiklik kaybolmamış olur.Fonksiyon içinde yerel değişkenin gösterdiği hafıza bölgesine 8 değeri atanır. Programın ekran çıktısı aşağıdaki

 

 

 

i = 100

 

DegerIleCagirma(i) fonksiyonundan sonra i = 100

 

PointerRefreransIleCagirma(i) fonksiyonundan sonra i = 8

 

 

 

 

 

 

 

   Fonksiyonların pointer referans ile çağırılması çok büyük veri yapılarının foksiyonlara parametre olarak geçilmesi gerektiğinde oldukça büyük avantajlar sağlar. Aşağıdaki program parçasını ele alalım. Kartvizit yapısı 337 byte büyüklüğündedir. F1 ve F2 fonksiyonlarının aynı işi yapan iki farklı fonksiyon olduğunu varsayalım. F2 fonksiyonu F1 fonksiyonundan daha hızlı çalışır? Neden ? F1 fonksiyonu cağırıldığında Kartvizit tipindeki parametrenin bir kopyası yaratılır ve 337 byte’lık bilgi bu yeni yapıya kopyalanır. Halbuki F2 fonksiyonu çağrıldığında Kartvizit pointer tipinde bir parametre yaratılır ve sadece parametere olarak geçilen yapının adresi kopyalanır. Bu adres bilgisinin büyüklüğü kullanılan hafıza modeline göre değişir fakat her durumda 337 byte’tan çok ufaktır.

 

 

 

struct Kartvizit{

 

char ad[30];

 

char soyad[30];

 

char adres[255];

 

char evTel[11];

 

char isTel[11];

 

};

 

 

 

void F1(Kartvizit kart)

 

{

 

……….

 

}

 

 

 

void F2(Kartvizit *kart)

 

{

 

 

 

……….

 

 

 

}

 
 
  Bugün 115 ziyaretçi (165 klik) www.bilisim-egitim.tr.gg  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol