C Programlama #31 | İşaretçiler: Adres Saklayan Değişkenler

İşaretçiler (Pointers)

Eğitmen: Dr. Süleyman Burak ÇELİK

scanf'e neden değişkenin kendisini değil adresini veriyoruz? Otuz birinci derste, işaretçilerle geçecek dördüncü bloğun ilk dersinde, değeri bir adres olan değişkenleri tanıyoruz: işaretçinin tanımı, belleğe gerçek bir bakış ve işaretçiye doğru ilk değer. Her değişkenin bir değeri ve bellekte bir adresi var: not değişkeninin değeri 85, &not ise onun adresi; printf'te %p ile yazdırılıyor ve 0x ile başlayan, on altılık tabanda bir sayı olarak görünüyor. Programı iki kez çalıştırınca değer yine 85, ama adres değişiyor: macOS güvenlik için programın yığınını her çalıştırmada başka bir yere koyuyor. Yani adresi biz seçmiyoruz; onu saklamak için bir işaretçi gerekiyor. int *p tanımı sağdan sola okunur: p, bir int'i gösteren işaretçi. int *p = &not ile p, not'u gösteriyor; çıktının ilk iki satırında &not ve p aynı adresi yazıyor. lldb ile programı durdurup belleğe bakıyoruz: p de bir değişken ve kendi adresi var (not'tan 4 bayt sonra), içindeki değer ise not'un adresi; buna dolaylı erişim deniyor. sizeof ile boyutlara bakıyoruz: bu 64 bitlik Mac'te her adres 64 / 8 = 8 bayt; char 1, int 4, double 8 bayt, ama char *, int * ve double * hep 8 bayt. Bir tuzak: int *p, q satırında yıldız yalnız p'ye ait, q sıradan bir int (sizeof 8 ve 4); q'ya adres vermeye kalkınca gcc de clang da derlemiyor. Bu yüzden her işaretçi kendi satırında tanımlanır. İşaretçiye ilk değer üç yoldan verilir: bir adres, NULL ya da 0. NULL hiçbir yeri göstermez ve bu Mac'te ((void *)0) olarak tanımlı; int *r = 1000 ise iki derleyicide de hata: işaretçiye doğrudan verilebilen tek tam sayı 0. İlk değer verilmeyen bir işaretçi için gcc ve clang uyarıyor, clang = NULL öneriyor; çalıştırınca gerçek bir adrese benzeyen çöp bir değer görüyoruz. Son olarak işaretçilerin dört kullanımını ve bugünün dört kuralını özetliyoruz. Ekrandaki her çıktı, kodun gerçekten derlenip çalıştırılmasından geliyor. Bu derste: 1. Her değişkenin bir adresi var: &not, %p, on altılık taban; adres her çalıştırmada değişir 2. İşaretçi tanımı: int *p = ¬ sağdan sola okuma 3. lldb ile bellek: p'nin kendi adresi ve içindeki değer (dolaylı erişim) 4. İşaretçinin boyutu: bu Mac'te her işaretçi 8 bayt 5. Yıldız tuzağı (int *p, q), NULL ve ilk değersiz işaretçi Bölümler: 0:00 İşaretçiler 0:24 Her değişkenin bir adresi var 1:02 İşaretçi tanımı 1:44 Bellekte: p ve not 2:26 İşaretçinin boyutu 2:58 Yıldız yalnız yanındaki ada ait 3:36 NULL: hiçbir yeri göstermeyen işaretçi 4:19 İlk değer verilmezse 4:57 İşaretçiler ne işe yarar? 5:24 Bugünün dört kuralı 5:50 Sonraki ders: & ve * işleçleri Kaynak kitap: Paul Deitel, Harvey Deitel — C How to Program, 9. baskı (2022), §7.1–7.2. Konu sırası ve kavramlar kaynak kitaptan izlenir; anlatım, örnekler ve ekranlar özgündür. Hedef kitle: C'ye yeni başlayan tüm mühendislik ve bilgisayar/yazılım öğrencileri. Ön koşul: C Programlama #01–#30.

Bu videoyu izlemek için Premium üyelik gerekir.