Neler yeni
Türkiye'nin En Güncel Forum Sitesi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı yada giriş yapmalısınız. Forum üye olmak tamamen ücretsizdir.

Adres Aritmetiği

ByOnur58

Kayıtlı Üye
MFC Üyesi
  • Üyelik Tarihi
    7 Ocak 2015
  • Mesajlar
    2,113
  • MFC Puanı
    10
  • MFC Seviyesi

Merhaba,

Bu anlatımım da adres aritmetiği üzerinde durmak istiyorum.

C dilinin güçlü özelliklerinden olan işaretçiler(pointer) üzerinde operatörler ile yapılan işlemleri adres aritmetiği olarak adlandırabiliriz.

Örneğin p adında bir işaretçimiz olsun, p++ işlemi p işaretçisini bir sonraki elemanı gösterecek şekilde arttırır, p += i ise p’nin o anki konumundan i kadar ötedeki elemanı gösterir. Bunlar adres aritmetiğinin en basit biçimleridir.

p ve q adında 2 adet aynı dizinin farklı yerlerini gösteren işaretçilerimiz olsun. p ve q arasında ==, =,<,>,>=,<= operatörlerini çalıştırabiliriz. Örneğin;

p == q

testi, p işaretçisi q işaretçisine eşitse doğrudur. Aynı dizinin elemanlarını göstermeyen işaretçilerde bu gibi operatörler kullanılmaz. Bir istisna olarak bir dizinin en son elemanından sonra gelen ilk eleman işaretçi aritmetiğinde kullanılabilir. Örnek olarak girilen string’in uzunluğunu bulan bir program yazalım;



programda p işaretçisi s’nin ilk değerini gösterilecek şekilde ayarlandı. p dosya sonuna gelene kadar(\\0) while döngüsü dönmeye başladı ve her \\0 karakterini görmediğinde p işaretçisini bir sonraki elemanı gösterecek şekilde arttırıyor. Döngü bittiğinde ise p işaretçisinin gösterdiği son değerden, s işaretçisinin gösterdiği ilk değerden çıkartılıyor ve böylece uzunluk geri döndürülmüş oluyor.

Geçerli işaretçi işlemleri; aynı türdeki işaretçilerin birbirine atanması(=), bir işaretçinin tamsayı ile toplanması ya da işaretçi ve tamsayının birbirinden çıkarılması, aynı dizinin elemanlarını gösteren işaretçilerin karşılaştırılması(==) dışında yapılan işlemler geçersiz olur. Yani çarpma, bölme, virgüllü sayılarla toplamak geçersizdir.
 
Üst Alt