9 - İşaretçiler (Pointers)
2024
+------------+------------+------------+------------+
| Adres | 0x1000 | 0x1004 | 0x1008 | ...
+------------+------------+------------+------------+
| Değer | 10 | 0x1000 | 'A' | ...
+------------+------------+------------+------------+
^ ^
| |
int sayi int *ptr
sayi
değişkeni 0x1000 adresinde saklanıyor ve değeri 10.ptr
işaretçisi 0x1004 adresinde saklanıyor ve değeri sayi
değişkeninin adresi olan 0x1000.*ptr
ifadesi, ptr
’nin tuttuğu adresteki değeri verir (burada, 10). *
operatörüne, bu bağlamda, dereference operatörü denir.Sözdizimi:
veri_tipi
: İşaretçinin işaret edeceği değişkenin veri tipi.*
: İşaretçi olduğunu belirtir.isaretci_adi
: İşaretçiye verilen isim.İlklendirme:
#include <stdio.h>
int main() {
int sayi = 10;
int *ptr; // int türünde bir işaretçi tanımlama
ptr = &sayi; // ptr'ye sayi'nin adresi atanır
printf("sayi'nin değeri: %d\n", sayi);
printf("sayi'nin adresi: %p\n", &sayi);
printf("ptr'nin değeri: %p\n", ptr); // ptr, sayi'nin adresini tutar
printf("ptr'nin gösterdiği adresteki değer: %d\n", *ptr); // *ptr, sayi'nin değerini verir
return 0;
}
#include <stdio.h>
int main() {
int sayilar[5] = {10, 20, 30, 40, 50};
int *ptr = sayilar; // ptr, sayilar dizisinin ilk elemanının adresini gösterir
printf("İlk eleman: %d\n", *ptr); // Çıktı: 10
printf("İkinci eleman: %d\n", *(ptr + 1)); // Çıktı: 20
printf("Üçüncü eleman: %d\n", *(ptr + 2));// Çıktı: 30
return 0;
}
NULL
, bir işaretçinin hiçbir adresi işaret etmediğini belirtmek için kullanılan özel bir değerdir.stdio.h
başlık dosyasında tanımlıdır.#include <stdio.h>
int main() {
int x, *p1, *p2, *p3;
x = 123;
p2 = NULL;
p3 = &x;
printf("Değer atanmamış p1 pointer'ının değeri: %p\n", p1);
printf("p2 = NULL atanmış pointer'ın değeri: %p\n", p2);
printf("p3 = &x atanmış pointer'ının değeri: %p\n", p3);
printf("&x adresinin değeri: %p\n", &x);
if (p2 == NULL) {
printf("p2 bir null pointer'dır. Herhangi bir adresi göstermiyor.\n");
}
if (p3 != NULL) {
*p3 = 5; // p3, x'in adresini gösterdiği için x'in değerini değiştirebiliriz.
printf("x'in yeni değeri (p3 ile değiştirildi): %d\n", x);
}
return 0;
}
NULL
değeri atamak önemlidir.free()
fonksiyonu ile). (İlerleyen bölümlerde detaylı olarak işlenecek.)*
operatörü : İşaretçinin gösterdiği adresteki değere erişir.&
(Adres Operatörü): Değişkenin bellek adresini verir.NULL
Pointer: Hiçbir adresi göstermeyen işaretçi.