1. Home
  2. Docs
  3. C++
  4. İşaretçiler
  5. İşaretçilerde Aritmetik İşlemler

İşaretçilerde Aritmetik İşlemler

Print

Bu yazıda C++ işaretçi aritmetiğinden bahsedeceğiz. C++ işaretçi aritmetiğine izin veren bir dildir. Bir işaretçi artırılabilir, azaltılabilir, bir sayıyla toplayabilir, bir sayı çıkartılabilir veya bir işaretçiyi başka bir işaretçiden çıkartılabiliriz. Ancak bu işaretçi aritmetiği sabit boyutlu dizi elemanlarını işaret eden işaretçiler için uygundur.

İşaretçi aritmetiği, değişken tiplerinin farklı bilgisayarlar üzerinde farklı boyutta yer kaplamasından dolayı makine bağımlıdır.

Şimdi daha iyi anlayabilmek için öncelikle bir dizi tanımlayalım.

int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Tanımladğımız bu 10 elemanlı dizinin adresini bir işaretçiye atayalım.

int * arrPtr = &arr[ 0 ];

Atadığımız bu işaretçiyi ekrana yazdırdığımızda ve bu işaretçiyi referanstan kurtarıp ekrana yazdırdığımızda ekrana yazılan değerlere bakalım.

std::cout << arrPtr << "\n";        // print 0x7ffca4137720

std::cout << *( arrPtr ) << "\n";   // print 1

Ekrana hem adresini hem de ilk değerini yazdırmış olduk. Peki şimdi arrPtr+2 yaptığımızda nasıl bir sonuç alırız?

std::cout << arrPtr+2 << "\n";      // print 0x7ffca4137728

std::cout << *( arrPtr+2 ) << "\n"; // print 3

Bu sefer ekrana 3 ve 0x7ffca4137728 yazdı. Buradan çıkartacağımız sonuç aslında arrPtr+2 demek arrPtr+2*4 demek oluyor.

Bir işaretçiyi bir sayı kadar artırmak demek o işaretçinin gösterdiği nesnenin boyutu*sayı kadar artırmak anlamına gelir. Bu durum çıkarma işlemi için de geçerlidir.

Şimdi tanımladğımız iki işaretçiyi birbirinden çıkartmayı deneyelim.

int * arrPtr = &arr[ 0 ];

int * arrPtr2 = &arr[3];

std::cout << arrPtr << "\n";         // print 0x7ffca4137720

std::cout << arrPtr+2 << "\n";       // print 0x7ffca4137728

std::cout << arrPtr2-arrPtr << "\n"; // print 3

Bu sefer ekrana 3 yazdı. Bu işlem bize arrPt2 den arrPtr’a kadar saklanan elemanların sayısını verir.

Bu işlemleri sadece sabit dizilere işaret eden işaretçiler üzerinde yapabileceğimizi unutmayın. Başka türlü tanımlarda değişkenlerin bellekte arka arka saklandığını bilemeyiz.

İşaretçi aritmetiği üzerinde anlatılabilecekler kısaca bu kadardır. İşaretçiler hakkında daha detaylı bilgiler öğrenmek için diğer yazıları takip edebilirsiniz.