Menu
Coddy logo textTech

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 yapılarla çalışmakta rahat olduğuna göre, onları başka bir güçlü C kavramıyla birleştirmenin zamanı geldi: işaretçiler. int veya char gibi temel veri türlerine işaretçiler oluşturabildiğin gibi, bir yapı değişkeninin adresini tutan işaretçiler de oluşturabilirsin.

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

struct StructureName *pointerName;

Örneğin, tanıdık Point yapımızı kullanarak:

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

Bu, bir Point yapısının adresini depolayabilen 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ız:

ptr = &p1;

Şimdi ptr, p1 yapı değişkeninin bellek adresini tutuyor. Bu, özellikle yapıları işlevlere aktarırken veya belleği dinamik olarak yönetirken yapılarla çalışmak için yeni olanaklar sunar. Yapılara yönelik işaretçiler, daha karmaşık veri yapıları oluşturmak ve verimli C programları yazmak için gereklidir.

challenge icon

Görev

Kolay

Yapılara işaretçilerle çalışmayı gösteren bir C programı oluştur. Programın şunları yapmalıdır:

  1. Aşağıdaki üyelerle Product adlı bir struct tanımla:
    • Ürün kimliğini depolamak için bir tamsayı id
    • Ürün adını depolamak için 25 boyutunda bir karakter dizisi name
    • Ürün fiyatını depolamak için bir kayan noktalı sayı price
    • Mevcut miktarı depolamak için bir tamsayı quantity
  2. main işlevinde item adlı bir Product değişkeni oluştur ve aşağıdaki değerlerle başlat:
    • Kimlik: 501
    • Ad: "Laptop"
    • Fiyat: 899.99
    • Miktar: 15
  3. itemPtr adlı bir Product yapısına işaretçi tanımla
  4. Adres alma operatörünü kullanarak item değişkeninin adresini itemPtr'a ata
  5. Yapı üyelerine doğrudan erişerek (nokta operatörünü kullanarak) özgün ürün bilgilerini tam olarak şu biçimde yazdır:
    • Original Product Info:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  6. Yapı üyelerine işaretçi üzerinden erişerek (dereference operatörünü ve nokta gösterimini kullanarak: (*itemPtr).member) aynı ürün bilgilerini tam olarak şu biçimde yazdır:
    • Product Info via Pointer:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  7. İşaretçinin yapıyı doğru şekilde gösterdiğini doğrulamak için bellek adreslerini tam olarak şu biçimde yazdır:
    • 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 görev, yapı işaretçisi bildirimi, adres alma operatörünü kullanarak adres atama ve dereference operatörünü nokta gösterimiyle birleştirerek işaretçiler üzerinden yapı üyelerine erişme konusundaki anlayışını sınar. Ayrıca işaretçinin yapı değişkeninin adresini doğru şekilde tuttuğunu da doğrulayacaksın.

Kendin dene

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

// YAPILACAK: Product yapısını (struct) burada tanımlayın

int main() {
    // YAPILACAK: Kodunuzu buraya yazın
    // 1. 'item' adlı Product değişkenini oluşturun ve başlatın
    // 2. 'itemPtr' adında Product türünde bir işaretçi (pointer) tanımlayın
    // 3. 'item' değişkeninin adresini 'itemPtr' işaretçisine atayın
    // 4. Nokta operatörünü kullanarak orijinal ürün bilgilerini yazdırın
    // 5. (*itemPtr).member kullanarak işaretçi üzerinden ürün bilgilerini 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