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.