CodeBlanks Logo Icon CodeBlanks

void işaretçi

  • C kursu
  • Orta seviye
  • Ders 5/116
  • 5 dk

void* ile genel işaretçi kullanmayı öğrenirsin.

void işaretçi (void*)

Bir void işaretçi (void *), türü bilinmeyen bir adresi tutan genel işaretçidir. Herhangi bir veri türüne işaretçi, void *'a örtülü çevrilebilir.

Örnek: int x = 5; void *p = &x;. Burada p bir int'a işaret eder ama türü kaybedilmiştir. p üzerinden değere erişmek için önce doğru türe çevirmelisin: *(int *)p size 5 verir. void *, malloc'un dönüş türüdür ve genel veri yapılarının (ör. ağaç düğümü) temelidir.

void* ile genel fonksiyon

void * sayesinde tek bir fonksiyon farklı türlerle çalışabilir. Standart kütüphanedeki qsort bunun en bilinen örneğidir: void * tabanlı bir dizi alır ve türden bağımsız sıralar.

Örnek bir genel yazdırma: void print_int(void *p) { printf("%d\n", *(int *)p); }. Bu fonksiyon bir int *'ı void * üzerinden alır ve yazdırır. Avantajı, aynı imzayı kullanarak farklı türler için benzer fonksiyonlar yazabilmen; dezavantajı, tür güvenliğinin derleme anında kaybolmasıdır.

Uygulama void* ile int yazdır

void print_int(void *p) fonksiyonu yaz; içinde *(int *)p değerini printf ile yazdır. main içinde int x = 99; tanımla, print_int(&x) çağrısı yap.

Başlangıç kodu

main.c
#include <stdio.h>

// print_int fonksiyonunu yaz
// main içinde int tanımla ve çağır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

void print_int(void *p) {
    printf("%d\n", *(int *)p);
}

int main(void) {
    int x = 99;
    print_int(&x);
    return 0;
}

Beklenen çıktı

99

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 void *p ile int değere nasıl erişilir?

  • p->int
  • *p
  • p.int
  • *(int *)p Doğru cevap

Açıklama: Önce (int *) ile çevirip sonra * ile dolaylarsın.

2 void*'ı int'a çevir ve yazdır

Soru
int x = 7;
void *p = &x;
printf("%d\n", *(int *)____);
Cevap
int x = 7;
void *p = &x;
printf("%d\n", *(int *)p);

Açıklama: p void*'dır; önce (int *) ile çevrilip sonra * ile dolaylanır.

3 void* kullanımını eşle

Kavram Anlamı
void *p Genel işaretçi
(int *)p Türe çevrim
*(int *)p Değere erişim
void *malloc(...) Tahsis dönüşü

Orta seviye bölümündeki tüm dersler