Menu
CoddyTech

Yapılara İşaretçiler

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

Artık struct'larla çalışmaya alıştığınıza göre, onları güçlü bir başka C kavramıyla birleştirmenin zamanı geldi: işaretçiler. int veya char gibi temel veri türlerine işaretçiler oluşturabildiğiniz gibi, bir struct değişkeninin adresini tutan işaretçiler de oluşturabilirsiniz.

Bir struct işaretçisi bildirme sözdizimi, diğer işaretçi bildirimleriyle aynı kalıbı izler:

struct StructureName *pointerName;

Örneğin, alışık olduğumuz Point struct'ını kullanarak:

struct Point p1 = {10, 20};
struct Point *ptr;

Bu, bir Point yapısının adresini saklayabilen ptr adlı bir işaretçi oluşturur. İşaretçinin gerçekten yapı değişkenimizi göstermesini sağlamak için adres operatörünü kullanırsın:

ptr = &p1;

İşaretçi aracılığıyla bir üyeyi okumak için işaretçinin başvurusunu kaldırın ve ardından nokta operatörünü kullanın. Parantezler gereklidir, çünkü ., * operatöründen daha sıkı bağlanır:

printf("%d", (*ptr).x); // p1.x ile aynı

Artık ptr, p1 struct değişkeninin bellek adresini tutuyor. Bu, özellikle struct'ları fonksiyonlara geçirirken veya belleği dinamik olarak yönetirken struct'larla çalışmak için yeni olanaklar sunar. Struct işaretçileri, daha karmaşık veri yapıları oluşturmak ve verimli C programları yazmak için gereklidir.

challenge icon

Görev

Kolay

C dilinde, struct işaretçileriyle çalışmayı gösteren bir program oluştur. Programın şunları yapmalı:

  1. Aşağıdaki üyeleri içeren Product adlı bir struct tanımla:
    • Ürün kimliğini saklamak için bir tamsayı id
    • Ürün adını saklamak için 25 elemanlı bir karakter dizisi name
    • Ürün fiyatını saklamak için bir kayan noktalı sayı price
    • Mevcut miktarı saklamak için bir tamsayı quantity
  2. main fonksiyonunda, item adlı bir Product değişkeni oluştur ve onu şu değerlerle başlat:
    • Kimlik: 501
    • Ad: "Laptop"
    • Fiyat: 899.99
    • Miktar: 15
  3. itemPtr adlı bir Product struct işaretçisi tanımla
  4. Adres alma operatörünü kullanarak item değişkeninin adresini itemPtr değişkenine ata
  5. Struct üyelerine doğrudan erişerek (nokta operatörünü kullanarak) orijinal ürün bilgilerini tam olarak şu biçimde yazdır:
    • Original Product Info:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  6. Aynı ürün bilgilerini struct üyelerine işaretçi üzerinden erişerek (başvuruyu kaldırma operatörünü ve nokta gösterimini kullanarak: (*itemPtr).member) tam olarak şu biçimde yazdır:
    • Product Info via Pointer:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  7. Bellek adreslerini tam olarak şu biçimde yazdırarak işaretçinin struct'ı doğru gösterdiğini doğrula:
    • Address of item: [address]
    • Value of itemPtr: [address]
    • Address verification: [result]

Adres doğrulaması için, adresler aynıysa Match, farklıysa No Match yazdır.

Bu alıştırma, struct işaretçisi bildirimini, adres alma operatörünü kullanarak adres atamayı ve başvuruyu kaldırma operatörü ile nokta gösterimini birlikte kullanarak işaretçiler üzerinden struct üyelerine erişmeyi anlayıp anlamadığını sınar. Ayrıca işaretçinin struct değişkeninin adresini doğru şekilde tuttuğunu doğrulayacaksın.

Kendin dene

#include <stdio.h>
#include <string.h>

// TODO: Product yapısını burada tanımlayın

int main() {
    // TODO: Kodunuzu buraya yazın
    // 1. 'item' adlı Product değişkenini oluşturun ve başlangıç değerlerini atayın
    // 2. 'itemPtr' adlı bir Product işaretçisi tanımlayın
    // 3. 'item' değişkeninin adresini 'itemPtr' değişkenine atayın
    // 4. Nokta operatörünü kullanarak ürünün başlangıç bilgilerini yazdırın
    // 5. (*itemPtr).member kullanarak ürün bilgilerini işaretçi üzerinden yazdırın
    // 6. Adresleri yazdırın ve doğrulayı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.

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

Kendi başına pratik yap: Online C derleyicisi