Menu
Coddy logo textTech

İşaretçiler ve Referanslar

Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 104.

Artık yığın ve öbek belleğini anladığınıza göre, bellek konumlarıyla doğrudan çalışmanızı sağlayan araçları inceleyelim: işaretçiler ve referanslar.

İşaretçi, başka bir değişkenin bellek adresini depolar. İşaretçiyi * ile tanımlar ve & kullanarak bir adres alırsın.

int value = 42;
int* ptr = &value;    // ptr, value'nin adresini tutar

std::cout << ptr;     // Bellek adresini yazdırır
std::cout << *ptr;    // Dereference: 42 yazdırır

Referans, mevcut bir değişken için bir takma addır. Bağlandıktan sonra her zaman o değişkeni ifade eder. Onu & ile bildirirsiniz.

int value = 42;
int& ref = value;     // ref, value için bir takma addır

ref = 100;            // value'yu 100 yapar
std::cout << value;   // 100 yazdırır

Temel farklar:

İşaretçilerReferanslar
null olabilirBaşlatılmalıdır
Yeniden atanabilirYeniden bağlanamaz
Değere erişmek için * kullanılırDeğere doğrudan erişilir
Hiçbir şeyi göstermeyebilirHer zaman geçerlidir

Her ikisi de nesneleri kopyalamadan işlevlere verimli bir şekilde aktarmak ve yığın üzerinde ayrılmış bellekle çalışmak için gereklidir. Referanslar daha güvenli ve basittir; işaretçiler ise yeniden atama yapmanız veya null değerini kontrol etmeniz gerektiğinde daha fazla esneklik sunar.

challenge icon

Görev

Kolay

Verileri değiştirirken işaretçilerin ve referansların nasıl farklı çalıştığını gösteren basit bir değer değiştirme sistemi oluşturalım.

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • ValueOps.h: Tamsayı değerlerini farklı şekillerde değiştiren üç işlev tanımlayın:
    • doubleByPointer(int* ptr): bir işaretçi alır ve işaret ettiği değeri iki katına çıkarır
    • tripleByReference(int& ref): bir referans alır ve değeri üç katına çıkarır
    • swapValues(int* a, int* b): iki işaretçi alır ve işaret ettikleri değerleri yer değiştirir
  • main.cpp: Girdiden iki tamsayı okuyun, ardından hem işaretçileri hem de referansları gösterin:
    • Orijinal değerleri yazdırın: "Original: <first> <second>"
    • İlk değer üzerinde doubleByPointer kullanın, ardından şunu yazdırın: "After double: <first>"
    • İkinci değer üzerinde tripleByReference kullanın, ardından şunu yazdırın: "After triple: <second>"
    • Her iki değeri yer değiştirmek için swapValues kullanın, ardından şunu yazdırın: "After swap: <first> <second>"

İşaretçilerle işlev çağırırken değişkenin adresini geçirmek için adres operatörünü (&) kullanmayı unutmayın. Referanslar daha doğal çalışır; değişkeni doğrudan geçirmeniz yeterlidir.

Başlık dosyanızı main.cpp içine #include "ValueOps.h" kullanarak ekleyin.

Kendin dene

#include <iostream>
#include "ValueOps.h"
using namespace std;

int main() {
    // Girişten iki tamsayı oku
    int first, second;
    cin >> first;
    cin >> second;
    
    // Orijinal değerleri yazdır
    cout << "Original: " << first << " " << second << endl;
    
    // TODO: İlk değerde doubleByPointer kullan (adresi & kullanarak geçir)
    
    // TODO: İkiye katladıktan sonra yazdır
    
    // TODO: İkinci değerde tripleByReference kullan (değişkeni doğrudan geçir)
    
    // TODO: Üçe katladıktan sonra yazdır
    
    // TODO: Her iki değeri takas etmek için swapValues kullan (adresleri & kullanarak geçir)
    
    // TODO: Takastan sonra yazdır
    
    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.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C++ derleyicisi