11.9 void Tipindeki Göstericiler
11.9 void Tipindeki Göstericiler
void göstericiler herhangi bir veri tipine ait olmayan göstericilerdir. Bu özelliğinden dolayı, void gösterici genel gösterici (generic pointer) olarak da adlandırılır.
void göstericiler, void anahtar sözcüğü ile bildirilir. Örneğin:
1 |
void *adr; |
gibi.
void göstericiler yalnızca adres saklamak için kullanılır. Bu yüzden diğer göstericiler arasında atama işlemlerinde kullanılabilir. Örneğin aşağıdaki atamada derleyici bir uyarı veya hata mesajı vermez:
1 2 3 4 5 6 |
void *v; char *c; . . . v = c; /* sorun yok !*/ |
Program 11.10’de void tipindeki bir göstericinin, program içinde, farklı tipteki verileri nasıl göstereceği ve kullanılacağı örneklenmiştir. İnceleyiniz.
Program 11.10: void gösterici ile farklı tipteki verileri gösterme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* 10prg10.c: void gosterici (generic pointer) uygulamasi */ #include <stdio.h> int main() { char kar = 'a'; int tam = 66; double ger = 1.2; void *veri; veri = &kar; printf("veri -> kar: veri %c karakter degerini gosteriyor\n", *(char *) veri); veri = &tam; printf("veri -> tam: simdi veri %d tamsayi degerini gosteriyor\n", *(int *) veri); veri = &ger; printf("veri -> ger: simdi de veri %lf gercel sayi degerini gosteriyor\n", *(double *) veri); return 0; } |
ÇIKTI
1 2 3 |
veri -> kar: veri a karakter degerini gosteriyor veri -> tam: simdi veri 66 tamsayi degerini gosteriyor veri -> ger: simdi de veri 1.200000 gercel sayi degerini gosteriyor |
Benzer olarak, fonksiyon parameterelerinin kopyalanması sırasında da bu türden atama işlemleri kullanılabilir. Uygulamada, tipten bağımsız adres işlemlerinin yapıldığı fonksiyonlarda, parametre değişkeni olarak void göstericiler kullanılır. Örneğin
1 2 3 4 5 6 |
void free (void *p) { . . . } |
Parametresi void *p olan free fonksiyonu, herhangi türden gösterici ile çağrılabilir.