Menu
Coddy logo textTech

İşaretçi Olarak Dizi İsimleri

Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 7 / 63.

C dilindeki diziler ve işaretçiler, C’nin bellekteki verilerle nasıl çalıştığını anlamanın temelini oluşturan özel bir ilişkiye sahiptir. Bir dizi tanımladığınızda, dizinin adı, dizinin ilk öğesine işaret eden bir sabit işaretçi olarak davranır.

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

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' points to the first element
// numbers == &numbers[0]  // Bunlar eşdeğerdir!

Bu eşdeğerlik çok önemlidir: numbers ve &numbers[0] size tamamen aynı bellek adresini verir. Dizi adı, adres operatörünü kullanmak zorunda kalmadan ilk öğenin adresine başvurmanın yalnızca daha kullanışlı bir yoludur.

Bu ilişkiyi anlamak, dizilerle işaretçi tekniklerini kullanmanın kapısını açar; bu da kodunuzu daha esnek ve verimli hâle getirebilir. 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çilerin eşdeğerliğini gösteren bir C programı yazın. Programınız şunları yapmalıdır:

  1. numbers adlı, 4 elemanlı bir tamsayı dizisi tanımlayın ve bu diziyi {10, 20, 30, 40} değerleriyle başlatın
  2. ptr adlı bir tamsayı işaretçisi tanımlayın
  3. numbers dizi adını ptr işaretçisine atayın
  4. numbers biçim belirtecine sahip printf kullanarak %p içinde saklanan adresi yazdırın
  5. &numbers[0] biçim belirtecine sahip printf kullanarak ilk elemanın adresini %p yazdırın
  6. ptr biçim belirtecine sahip printf kullanarak %p içinde saklanan adresi yazdırın
  7. Dizi adını kullanarak ilk elemanın değerini yazdırın: *numbers
  8. İşaretçiyi kullanarak ilk elemanın değerini yazdırın: *ptr

Çıktınız aşağıdaki biçimde sonuçları göstermelidir:

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

Bu alıştırma, dizi adının ilk elemana sabit bir işaretçi gibi davrandığını ve numbers dizi adına atandığında &numbers[0], ptr ve ptr ifadelerinin tümünün aynı bellek adresini içerdiğini gösterir.

Kendin dene

#include <stdio.h>

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

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

Kendi başına pratik yap: Online C derleyicisi