Standart C Programlama Dili


5.8.3. Gösterge Dizileri

Altkısım 4.2.3’te, geleneksel olarak argv adı verilen, main’in ikinci parametresinin bir karakter göstergeleri dizisi olduğunu görmüştük. Aslında bunu anlamak o kadar da zor değildir; eğer belirli bir sayıda göstergemiz varsa, diğer tipteki değişkenler için yaptığımız gibi, bunları da bir dizi içinde saklayabiliriz. Bir örnek görelim,

char *msj[] = {
  "Tamam",
  "Disk dolu",
  "Sozdizim hatasi",
  /*  */
  "Dosya bulunamadi"
};

Burada, ilkleyen içinde verilen karakter dizilerinin sayısı kadar boyda bir dizimiz vardır. Her karakter dizisinin temel adresi msj dizisi içinde arka arkaya gelen gösterge elemanları içinde saklanmaktadır. Bu msj’yi iki-boyutlu bir karakter dizisi olarak tanımlamaktan iyidir. Bellek kullanımı dikkate alarak bunun nedenini açıklamaya çalışın.

Bu diziyi kullanabilecek bir hata yordamı şöyledir:

void hata (int hk)
{
  printf("<%d>: %s.\n", hk, msj[hk]);
  exit(hk);
}

Burada exit, programı bitiren bir kütüphane fonksiyonudur. stdlib.h başlık dosyasında bildirilmiştir. int tipinden olan argümanı da, çağıran sürece—tipik olarak işletim sistemine—döndürülen bir durum kodudur. Geleneksel olarak, 0 normal sonuçlanmayı, sıfırdan farklı bir sayı da farklı bir durumu göstermek için kullanılır.

Başka bir örneğe bakalım:

int cikis(void), ekleme(void), silme(void), degistirme(void);

int (*fonkt[])(void) = {
  cikis, ekleme, silme, degistirme
};

Bu, fonksiyonlara göstergelerden oluşan bir dizidir. Tekrar, işleç önceliklerini anımsayın. İlk olarak fonksiyon tiplerini tanımlıyoruz. Fonksiyonların hepsinin parametresiz ve dönüş tiplerinin de hep aynı olduğuna dikkat edin. Daha sonra bu fonksiyonlara göstergelerle diziyi ilkliyoruz. Bildiğiniz gibi, eğer bir fonksiyon ismi arkasında parantez bulunmuyorsa, bu o fonksiyona bir göstergedir. Bu dizideki bir fonksiyonu çağırmak için,

(*fonkt[secenek])()

kullanırız; secenek burada bir tamsayıdır. Eğer secenek 0’sa cikis, 1 ise ekleme çağrılır vs.