Pointers and Arrays (İşaretçiler ve Diziler)
İşaretçi, C++’da değişkeninin başka bir değişkenin adresini depoladığını biliyoruz ve bu değişken verilerine erişmek için kullanılabilir. Benzer şekilde bir işaretçi de bir diziyi gösterebilir. Yani, bir dizinin tüm değerlerine erişmek için bir işaretçi de kullanılabilir.
Dizi, bitişik bir bellek konumunda (diğerinin yanı sıra) depolanan benzer tipte (aynı veri tipi) öğelerden oluşan bir koleksiyondur. Bu özellik, bu bitişik bellek konumlarında yineleme yapmak için kullanılabileceğinden, bir işaretçi için uygundur. Bir dizi oluşturduğumuzda, dizi adı temel olarak bu dizinin ilk adres bloğunu, yani temel adresi gösterir. Böylece dizi adının kendisi bir dizi olarak kabul edilebilir.
Syntax (Sözdizimi)
veri tipi (*var degiskenAdi)[dizi boyutu]; //Sekiz sayılık bir dizi işaretçisi şu şekilde tanımlanır int (*ptrDegiskeni)[8] = NULL;
Örnek:
#include <iostream> using namespace std; int main() { int (*ptrDegiskeni)[8]; int sayiDizisi[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; ptrDegiskeni = &sayiDizisi; cout << "İşaretçiyi kullanarak dizi değerleri:" << endl; for (int x = 0; x < 8; x++) { cout << "*(ptrDegiskeni + " << x << ") : "; cout << *(*ptrDegiskeni + x) << endl; } cout << endl << "sayiDizisi adresini adres olarak kullanarak dizi değerleri:" << endl; for (int x = 0; x < 8; x++) { cout << "*(sayiDizisi + " << x << ") : "; cout << *(sayiDizisi + x) << endl; } return 0; }
Çıktı:
İşaretçiyi kullanarak dizi değerleri: *(ptrDegiskeni + 0) : 1 *(ptrDegiskeni + 1) : 2 *(ptrDegiskeni + 2) : 3 *(ptrDegiskeni + 3) : 4 *(ptrDegiskeni + 4) : 5 *(ptrDegiskeni + 5) : 6 *(ptrDegiskeni + 6) : 7 *(ptrDegiskeni + 7) : 8 sayiDizisi adresini adres olarak kullanarak dizi değerleri: *(sayiDizisi + 0) : 1 *(sayiDizisi + 1) : 2 *(sayiDizisi + 2) : 3 *(sayiDizisi + 3) : 4 *(sayiDizisi + 4) : 5 *(sayiDizisi + 5) : 6 *(sayiDizisi + 6) : 7 *(sayiDizisi + 7) : 8
Örnek:
#include <iostream> using namespace std; int main() { int (*ptrDegiskeni)[8]; int sayiDizisi[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; ptrDegiskeni = &sayiDizisi; cout << "İşaretçiyi adres görüntüleme:" << endl; for (int x = 0; x < 8; x++) { cout << "*(ptrDegiskeni + " << x << ") : "; cout << *(ptrDegiskeni + x) << endl; } cout << endl << "sayiDizisi dizisinin adres görüntüleme:" << endl; for (int x = 0; x < 8; x++) { cout << "*(&sayiDizisi + " << x << ") : "; cout << *(&sayiDizisi + x) << endl; } return 0; }
Çıktı:
İşaretçiyi adres görüntüleme: *(ptrDegiskeni + 0) : 0x7ffc920f64d0 *(ptrDegiskeni + 1) : 0x7ffc920f64f0 *(ptrDegiskeni + 2) : 0x7ffc920f6510 *(ptrDegiskeni + 3) : 0x7ffc920f6530 *(ptrDegiskeni + 4) : 0x7ffc920f6550 *(ptrDegiskeni + 5) : 0x7ffc920f6570 *(ptrDegiskeni + 6) : 0x7ffc920f6590 *(ptrDegiskeni + 7) : 0x7ffc920f65b0 sayiDizisi dizisinin adres görüntüleme: *(&sayiDizisi + 0) : 0x7ffc920f64d0 *(&sayiDizisi + 1) : 0x7ffc920f64f0 *(&sayiDizisi + 2) : 0x7ffc920f6510 *(&sayiDizisi + 3) : 0x7ffc920f6530 *(&sayiDizisi + 4) : 0x7ffc920f6550 *(&sayiDizisi + 5) : 0x7ffc920f6570 *(&sayiDizisi + 6) : 0x7ffc920f6590 *(&sayiDizisi + 7) : 0x7ffc920f65b0