İşaretçiye işaretçi
- C kursu
- Orta seviye
- Ders 1/116
- 5 dk
Çift işaretçi (**) kavramını öğrenirsin.
Çift işaretçi
Bir işaretçiye işaretçi (pointer to pointer), bir işaretçinin adresini tutan değişkendir. C'de iki yıldız (**) ile bildirilir.
Örnek: int x = 5; int *p = &x; int **pp = &p;. Burada p, x'in adresini tutar; pp ise p'nin adresini tutar. *pp size p'yi verir (yani x'in adresi); **pp ise x'in kendisini verir. İki seviye dolaylama (indirection) böylece sağlanır.
Çift işaretçi ile değer değiştirme
Çift işaretçinin en güçlü yanı, orijinal değişkeni başka bir fonksiyon içinden değiştirebilmesidir. **pp = 42; yazdığınızda x'in değeri doğrudan değişir.
Bu, tek işaretçinin değişkeni değiştirmesine benzer; sadece bir seviye daha dışarıdasınız. *pp size p'yi verir; **pp ise x'in kendisine erişir. Bu yüzden çift işaretçi, dinamik dizi tahsisinde ve ağaç veri yapılarında sık görülür.
Uygulama Çift işaretçi ile değeri değiştir
int x = 5; ile bir değişken tanımla. int *p = &x; ve int **pp = &p; ile çift işaretçi kur. **pp üzerinden x'in değerini 42 yap ve printf ile x'i yazdır.
Başlangıç kodu
#include <stdio.h>
// x, p ve pp tanımla
// **pp ile x'i 42 yap
// x'i yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
int main(void) {
int x = 5;
int *p = &x;
int **pp = &p;
**pp = 42;
printf("%d\n", x);
return 0;
}Beklenen çıktı
42
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangisi int türüne çift işaretçi bildirir?
- int (*pp)*;
- int *pp[];
- int pp**;
- int **pp; Doğru cevap
Açıklama: int **pp; pp'nin int* türüne işaretçi olduğunu söyler.
2 Çift dolaylama ile x'e eriş
int x = 5;
int *p = &x;
int **pp = &p;
printf("%d\n", ____);
int x = 5;
int *p = &x;
int **pp = &p;
printf("%d\n", **pp);
Açıklama: **pp iki kez dolaylama yapar ve x'in değerini verir.
3 Çift işaretçi parçalarını eşle
| Kavram | Anlamı |
|---|---|
int *p |
Tek işaretçi |
int **pp |
Çift işaretçi |
*pp |
p'nin değeri |
**pp |
x'in değeri |