İş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 ediyorBurada, 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 ediyorDeğ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.
Görev
KolayBir 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:
valuesdizisinin ilk öğesini işaret edenptradında bir işaretçi oluşturun- Dizinin tüm 6 öğesi boyunca ilerlemek için işaretçi aritmetiği kullanın
- Her konumdaki işaretçiyi dereference ederek (işaretçinin gösterdiği değeri alarak) her bir öğeyi yazdırın
- İş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 ederDizi öğeleri arasında gezinmek için işaretçi aritmetiğini kullanın:
ptr++; // Bir sonraki öğeye geç
ptr = ptr + 2; // 2 öğe ileri gitDeğ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ğeriBu, 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;
}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
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev Ekleme