Menu
Coddy logo textTech

İşaretçiler ve Diziler

Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 5 / 56.

Diziler ve işaretçiler (pointers), C++'da özel bir ilişkiye sahiptir. Bir dizi tanımladığınızda, dizinin adı aslında o dizinin ilk elemanına yönelik bir işaretçi gibi davranır. Bu bağlantı, dizilerle güçlü şekillerde çalışmak için işaretçileri kullanmanıza olanak tanır.

Şu dizi tanımlamasını dikkate alın:

int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers;  // ptr artık numbers[0] elemanını işaret ediyor

Burada, numbers, &numbers[0] ile eşdeğerdir - her ikisi de size ilk elemanın adresini verir. ptr işaretçisi artık aynı konumu gösteriyor.

Bir diziye ait bir pointer elde ettiğinizde, elemanlar arasında gezinmek için pointer aritmetiğini kullanabilirsiniz. Bir pointer'a 1 eklemek, onu aynı türdeki bir sonraki elemana taşır:

ptr++;        // Artık numbers[1] öğesini işaret ediyor
ptr = ptr + 2; // Artık numbers[3] öğesini işaret ediyor

Değere erişmek için işaretçiyi herhangi bir konumda dereference edebilirsiniz: *ptr size mevcut konumdaki değeri verir ve *(ptr + 1) size bir sonraki öğenin değerini verir.

Bu işaretçi-dizi (pointer-array) ilişkisi, geleneksel dizin tabanlı döngüler yerine işaretçiler kullanarak diziler üzerinde yineleme yapmanıza olanak tanır ve dizi gezintisi için alternatif bir yaklaşım sunar.

challenge icon

Görev

Kolay

Bir dizide gezinmek ve her bir öğeyi yazdırmak için bir işaretçi (pointer) kullanan, işaretçiler ve diziler arasındaki ilişkiyi gösteren bir program oluşturun.

Size aşağıdaki dizi verilmiştir:

int values[6] = {15, 23, 8, 42, 17, 31};

Programınız şunları yapmalıdır:

  1. values dizisinin ilk öğesini işaret eden ptr adında bir işaretçi oluşturun
  2. Dizinin tüm 6 öğesi boyunca ilerlemek için işaretçi aritmetiği kullanın
  3. Her konumdaki işaretçiyi dereference ederek (işaretçinin gösterdiği değeri alarak) her bir öğeyi yazdırın
  4. İşaretçi aritmetiği kullanarak işaretçiyi bir sonraki öğeye taşıyın (işaretçiyi artırın)

Her bir öğeyi ayrı bir satırda şu formatta yazdırın:

Element: [value]

Çıktı, dizi indeksleme yerine işaretçi dereferencing yoluyla erişilen, dizide göründükleri sırayla tüm 6 öğeyi göstermelidir.

Kopya kağıdı

Dizi adları ilk öğeye işaretçi (pointer) olarak işlev görür. Bir dizi adını doğrudan bir işaretçiye atayabilirsiniz:

int numbers[5] = {10, 20, 30, 40, 50};
int* ptr = numbers;  // ptr, numbers[0] öğesini işaret eder

Dizi öğeleri arasında gezinmek için işaretçi aritmetiğini kullanın:

ptr++;        // Bir sonraki öğeye geç
ptr = ptr + 2; // 2 öğe ileri git

Değerlere erişmek için işaretçinin başvurusunu kaldırın (dereference):

*ptr          // Mevcut öğe değeri
*(ptr + 1)    // Bir sonraki öğe değeri

Bu, dizin tabanlı döngülere alternatif olarak işaretçi tabanlı dizi gezinmesini sağlar.

Kendin dene

#include <iostream>
using namespace std;

int main() {
    // Verilen dizi
    int values[6] = {15, 23, 8, 42, 17, 31};
    
    // TODO: Dizinin ilk elemanını işaret eden 'ptr' adında bir pointer oluşturun
    
    // TODO: Pointer aritmetiği kullanarak 6 elemanın tamamını dolaşmak için bir döngü kullanın
    // TODO: Pointer'ın referansını çözerek (dereferencing) her bir elemanı yazdırın
    // TODO: Pointer aritmetiği kullanarak pointer'ı bir sonraki elemana taşıyın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler