C Programlama #36 | İşaretçi Aritmetiği
İşaretçiler (Pointers)Eğitmen: Dr. Süleyman Burak ÇELİK
32. derste *p++ işaretçiyi 4 bayt, 34. derste ++s 1 bayt ilerletmişti. Neden? Otuz altıncı derste işaretçi aritmetiğini görüyoruz: bir işaretçiye 1 eklemek, adrese 1 eklemek değil, bir sonraki elemana geçmek demek. Beş int'lik bir dizide p başı gösterirken p + 1'in adresi 4, p + 2'ninki 8 bayt ileride (2 · 4); *(p + 2) de v[2], yani 30. Adımın büyüklüğü gösterilen türün boyutu: char * + 1 bir bayt, int * + 1 dört bayt, double * + 1 sekiz bayt — 35. dersteki sizeof değerleri. İki işaretçinin farkı bayt değil, aradaki eleman sayısıdır: double dizisinde s[1] ile s[4] arası 24 bayt, son - ilk = 24 / 8 = 3. ++ ve -- ile diziyi gezip işaretçileri karşılaştırıyoruz (p, son'dan küçük olduğu sürece ileri; önce q-- sonra okuyarak geri); dizinin hemen arkasını göstermek serbest, başından önceki yeri göstermek bile tanımsız. İşaretçi farkının gerçek bir kullanımı: bir metnin uzunluğu p - s ile bulunur; Ada Lovelace için 12, kütüphanedeki strlen ile aynı. void * her türden adresi dönüştürmesiz tutar ama gösterdiği yer okunamaz (gcc ve clang hatası); farklı türden işaretçiler karışmaz: int dizisinin adresini double *'a vermek gcc'de hata, clang'da yalnız uyarı ve çalışınca 1 ile 2'nin baytları double gibi okunup 4.24399e-314 gibi anlamsız bir sayı çıkıyor. Son olarak kuralları ve kısa bir soruyu (16 bayt arayla iki double * arasındaki fark 16 / 8 = 2) özetliyoruz. Ekrandaki her çıktı, kodun gerçekten derlenip çalıştırılmasından geliyor. Bu derste: 1. p + 1: bir sonraki eleman; adım gösterilen türün boyutu 2. İki işaretçinin farkı: aradaki eleman sayısı 3. ++ ve -- ile diziyi gezmek; dizinin dışı tanımsız 4. Metin uzunluğu: p - s 5. void * ve farklı türden işaretçiler Bölümler: 0:00 İşaretçi aritmetiği 0:15 Neden 4 bayt, neden 1 bayt? 0:38 p + 1: bir sonraki eleman 1:07 Adım = gösterilen türün boyutu 1:30 İki işaretçinin farkı 1:57 ++ ve -- ile diziyi gezmek 2:34 Metnin uzunluğu: p - s 3:06 void * ve farklı türler 3:48 İşaretçi aritmetiğinin kuralları 4:20 Bugünün dört kuralı 4:47 Sonraki ders: işaretçiler ve diziler Kaynak kitap: Paul Deitel, Harvey Deitel — C How to Program, 9. baskı (2022), §7.8. 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–#35.
Bu videoyu izlemek için Premium üyelik gerekir.