BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Dizinin Fonksiyona Geçirilmesi
 

Dizilerin Fonksiyonlara Parametre Olarak Geçilmesi

   C dilinde diziler fonksiyonlara daima referans olarak geçilirler. Diğer değişken tiplerinde olduğu gibi değer ile çağırma yöntemi diziler için kullanılamaz. Aşağıda fonksiyonlara dizilerin parametre olarak geçilme şekillerinden bazılarını inceliyeceğiz.

Print(char dizi[]);

   Yukarıdaki tanımlama Print fonksiyonuna bir karakter dizinin referansının (Bir string’in başlangıç adresinin) geçileceğinin anlatır.Tanımlamada parametre olarak geçilen dizinin boyutu hakkında bir bilgi bulunmamaktadır. Bir boyutlu bir dizini referansını elde etmek için dizinin boyutunun bilinmesine gerek yoktur.

   İkinci bir çağırma şekli ise direk olarak dizinin tanımlandığı tipte bir pointer’ı fonksiyona parametre olarak geçileceğini ifade eder.. Aşağıda bu kullanım şekli örneklenmektedir.

Print(char *diziBaslangici);    Bu kullanım şeklinde ise fonksiyonumuz bir char pointer alacak şekilde tanımlanmıştır. Bu tanımlama şeklide yukarıdaki ile aynı işlevi gerçekleştirmekterdir.

Print(char dizi[35]);

   Yukarıdaki tanımlama şekli ise yine Print fonksiyonun char bir dizinin referansını parametre olarak alacağını belirtmektedir. Dizinin boyut bilgisi derleyici tarafından göz ardı edilir çünkü yukarıda da belirttiğimiz gibi dizinin başlangıcına ait bir referans elde etmek için dizinin boyutunun bilinmesine gerek yoktur. Bu bilgi ancak kodu inceleyen programcıya bilgi verebilir.

 

 

<Resim>Dizileri fonksiyonlara adreslerinin geçilmesi fonksiyon içinde dizi üzerinde yapılcak değişiklerin dizini içeriğini değiştireceğinin unutmamak gerekir. Yapılan değişiklikler yerle bir dizi kopyası üzerinde gerçekleştirilmez. Orjinal dizi değişir.

Diziler İle Pointerlar Arasındaki İlişki <Resim><Resim>

   C programlama dilinde pointerlar ile diziler arasında çok yakın bir ilişki vardır. Herhangi bir dizinin ismi dizinin ilk elemanına ait bir pointer olarak tanımlanır.

 

 

int main(int argc, char **argv)

 

{

 

int array[5];

 

cout>>"Bir değer atanmadan önce array[0] = ">> array[0]>>endl;

 

*array = 2;

 

cout>>"Değer atanma işleminden sonra array[0] = ">> array [0]>>endl;

 

cout>>"array[0]'in adresi (&array[0]) =" >>& array [0]>>endl;

 

cout>>"array'in değeri array =" >> array >>endl;

 

getch();

 

return 0;

 

}

 

 

 

 

 

 

   Yukarıdaki örnek program diziler ile pointerlar arasındaki ilişkiyi açık bir şekilde göstermektedir. Kodu basamak basamak incelersek array isminde 5 elemandan oluşan bir int dizi tanımlanıyor. Bu dizinin ilk elemanının değeri ekrana yazdırılıyor. Sonraki adımda ise array Yukarıdaki örnek program diziler ile pointerlar arasındaki ilişkiyi açık bir şekilde göstermektedir. Kodu basamak basamak incelersek array isminde 5 elemandan oluşan bir int dizi tanımlanıyor. Bu dizinin ilk elemanının değeri ekrana yazdırılıyor. Sonraki adımda ise array değişkeninin gösterdiği adrese 2 değeri atanıyor ve array array dizisinin ilk elemanı tekrar ekrana yazdırılıyor.

 

   Aşağıdaki ekran çıktısına bakarsak ilk eşitleme işleminden önce array[0] ]’ın 0 değerine sahipken dizini isminin gösterdiği adrese değer 2 atanmasında sonra array[0] ]’ın değerinin 2 olduğunu görüyoruz. Buradan da anlaşılacağı üzere array ifadesi array dizisinin ilk elemanını göstermektedir. Sonraki satırlarda ise dizinin ilk elemanının ve dizinin ismimin gösterdiği adresler sırası ile ekrana yazdırılmaktadır.

 

 

 

Bir değer atanmadan önce array[0] = 0

 

Değer atanma işleminden sonra array[0] = 2

 

array[0]'in adresi (&array[0]) =0066FDF0

 

array 'in değeri array =0066FDF0

 

 

 

 

 

   Pointerlar konusunda da söylediğimiz gibi bir pointer değişkenin değerinin arttırmak suretiyle

pointer’ın tanımlandığı tipteki bir sonraki elemanın adresine ulaşabiliriz. Diziler, dizinini boyutu kadar elemanın dizinin başlangıç adresinden itibaren hafızada ardışık oluşturulması şeklinde elde edilirler. Dizinin i. Elemanı i+1’inci elemandan hemen önce gelmektedir. Pointer aritmetiği suretiyle dizi elemanlarınları üzerinde gezine biliriz. Aşağıdaki örnek programda 5 boyutlu bir int dizisinin elemanları hem dizi değişkeninin üzerinde dizi index’i aracılığıyla hem de dizinin başlangıç adresini gösteren bir pointer değişkenine çeşitli artımlar verilmek suretiyle ekrana yazdırılmaktadır.

 

 

 

int main(int argc, char **argv)

 

{

 

int array[5] = {0,1,2,3,4};

 

int *pInt = array;

 

// Dizi elemanlaryna de?er

 

for (int i = 0;i < 5; i++)

 

cout>>"array[">>i>>"]=">>array[i]>>endl;

 

cout>>"Pointer değişken aracılığıyla dizi üzerinde dolaşılması">>endl;

 

for (int i = 0;i < 5; i++)

 

cout>>"*(pInt + ">>i>>")=">>*(pInt + i)>>endl;

 

getch();

 

return 0;

 

}

 

 

 

array[0]=0

 

array[1]=1

 

array[2]=2

 

array[3]=3

 

array[4]=4

 

Pointer değişken aracılığıyla dizi üzerinde dolaşılması

 

*(pInt + 0)=0

 

*(pInt + 1)=1

 

*(pInt + 2)=2

 

*(pInt + 3)=3

 

*(pInt + 4)=4

 
 
  Bugün 141 ziyaretçi (221 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