Menu
Coddy logo textTech

İşaretçi Olarak Dizi İsimleri

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 7 / 63.

C'deki diziler ve işaretçiler, C'nin bellekteki verilerle nasıl çalıştığını anlamak için temel olan özel bir ilişkiye sahiptir. Bir dizi bildirdiğinizde, dizi adının kendisi dizinin ilk elemanına sabit bir işaretçi olarak işlev görür.

Bu, int numbers[5]; gibi bir diziniz olduğunda, numbers adının aslında her zaman numbers[0] öğesini işaret eden bir işaretçi olduğu anlamına gelir. Dizi adını, ayrıca bildirmenize gerek olmayan yerleşik bir işaretçi olarak düşünebilirsiniz.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' ilk öğeyi işaret eder
// numbers == &numbers[0]  // Bunlar eşdeğerdir!

Bu eşdeğerlik çok önemlidir: numbers ve &numbers[0] her ikisi de size tamamen aynı bellek adresini verir. Dizi adı, adres operatörünü kullanmak zorunda kalmadan ilk elemanın adresine atıfta bulunmanın sadece daha kullanışlı bir yoludur.

Bu ilişkiyi anlamak, kodunuzu daha esnek ve verimli hale getirebilecek olan dizilerle işaretçi tekniklerini kullanmanın kapısını açar. Temel fark, normal işaretçilerin aksine, dizi adlarının sabit işaretçiler olmasıdır - işaret ettikleri şeyi değiştiremezsiniz.

challenge icon

Görev

Kolay

Dizi adları ile ilk elemanlarına işaret eden pointer'lar arasındaki eşdeğerliği gösteren bir C programı yazın. Programınız şunları yapmalıdır:

  1. 4 elemanlı numbers adında bir tam sayı dizisi bildirin ve bunu {10, 20, 30, 40} değerleriyle başlatın
  2. ptr adında bir tam sayı pointer'ı bildirin
  3. numbers dizi adını ptr pointer'ına atayın
  4. numbers içinde saklanan adresi, %p format belirleyicisi ile printf kullanarak yazdırın
  5. İlk elemanın adresini &numbers[0], %p format belirleyicisi ile printf kullanarak yazdırın
  6. ptr içinde saklanan adresi, %p format belirleyicisi ile printf kullanarak yazdırın
  7. Dizi adını kullanarak ilk elemanın değerini yazdırın: *numbers
  8. Pointer'ı kullanarak ilk elemanın değerini yazdırın: *ptr

Çıktınız sonuçları aşağıdaki formatta görüntülemelidir:

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

Bu görev, dizi adının ilk elemana sabit bir pointer gibi davrandığını ve ptr'ye dizi adı atandığında numbers, &numbers[0] ve ptr ifadelerinin hepsinin aynı bellek adresini içerdiğini gösterir.

Kopya kağıdı

C'deki dizi adları, dizinin ilk elemanına yönelik sabit işaretçiler (constant pointers) olarak işlev görür.

Bir dizi tanımladığınızda, dizi adı ilk elemanı işaret eder:

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' ilk elemanı işaret eder
// numbers == &numbers[0]  // Bunlar eşdeğerdir!

Bir dizi adını bir işaretçiye atayabilirsiniz:

int *ptr;
ptr = numbers;  // ptr artık ilk elemanı işaret ediyor

İşaretçi notasyonunu kullanarak değerlere erişin:

*numbers  // Dizi adı aracılığıyla ilk elemanın değeri
*ptr      // İşaretçi aracılığıyla ilk elemanın değeri

Temel fark: Dizi adları sabit işaretçilerdir; normal işaretçilerin aksine, işaret ettikleri şeyi değiştiremezsiniz.

Kendin dene

#include <stdio.h>

int main() {
    // YAPILACAK: Kodunuzu buraya yazın
    // 1. 'numbers' dizisini {10, 20, 30, 40} ile tanımlayın ve başlatın
    // 2. 'ptr' adında bir tam sayı (integer) işaretçisi tanımlayın
    // 3. Dizi adını işaretçiye atayın
    // 4. Gerekli tüm adresleri ve değerleri yazdırı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.

Logic & Flow bölümündeki tüm dersler