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: 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: 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.
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
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 void free (void *p)
{
.
.
.
}
Parametresi void *p olan free fonksiyonu, herhangi türden gösterici ile çağrılabilir.