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 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 bildirdiğinizde, dizinin adı kendiliğinden dizinin ilk elemanına işaret eden sabit bir pointer gibi davranır.

Bu, int numbers[5]; gibi bir array kullandığınızda, numbers adının temelinde her zaman numbers[0] öğesine points eden bir pointer olduğu anlamına gelir. array adını, ayrıca declare etmeniz gerekmeyen yerleşik bir pointer 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] ifadelerinin her ikisi de size tam olarak aynı bellek adresini verir. Dizi adı, adres alma operatörünü kullanmak zorunda kalmadan ilk elemanın adresine başvurmanın yalnızca daha uygun bir yoludur.

Bu ilişkiyi anlamak, dizilerle işaretçi tekniklerini kullanmanın kapısını açar ve kodunuzu daha esnek ve verimli hale getirebilir. Temel fark, normal işaretçilerin aksine, dizi isimlerinin sabit işaretçiler olmasıdır - neyi gösterdiklerini değiştiremezsiniz.

challenge icon

Görev

Kolay

Dizi adları ile dizinin ilk elemanına işaret eden işaretçiler (pointers) 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 tamsayı (integer) dizisi bildirin ve bunu {10, 20, 30, 40} değerleriyle ilklendirin (initialize)
  2. Bir tamsayıya işaret eden ptr adında bir işaretçi bildirin
  3. numbers dizi adını ptr işaretçisine atayın
  4. numbers içinde saklanan adresi, %p biçim belirteci ile printf kullanarak yazdırın
  5. İlk elemanın adresini &numbers[0], %p biçim belirteci ile printf kullanarak yazdırın
  6. ptr içinde saklanan adresi, %p biçim belirteci ile printf kullanarak 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 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 işaretçi (constant pointer) gibi davrandığını ve ptr alanına dizi adı atandığında numbers, &numbers[0] ve ptr ifadelerinin hepsinin 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 bildirin ve başlatın
    // 2. 'ptr' adında bir tamsayı işaretçisi bildirin
    // 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