Menu
Coddy logo textTech

Yapılara İşaretçiler

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

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

Bir yapıya (struct) yönelik bir işaretçi (pointer) tanımlama sözdizimi, diğer işaretçi tanımlamalarıyla aynı kalıbı izler:

struct StructureName *pointerName;

Örneğin, aşina olduğumuz Point struct yapısını kullanarak:

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

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

ptr = &p1;

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

challenge icon

Görev

Kolay

Yapı (struct) işaretçileri ile çalışmayı gösteren bir C programı oluşturun. Programınız şunları yapmalıdır:

  1. Aşağıdaki üyelere sahip Product adında bir struct tanımlayın:
    • Ürün kimliğini saklamak için bir tam sayı id
    • Ürün adını saklamak için 25 boyutunda bir karakter dizisi name
    • Ürün fiyatını saklamak için bir float price
    • Mevcut miktarı saklamak için bir tam sayı quantity
  2. Ana fonksiyonda, item adında bir Product değişkeni oluşturun ve onu aşağıdaki değerlerle başlatın:
    • ID: 501
    • Name: "Laptop"
    • Price: 899.99
    • Quantity: 15
  3. itemPtr adında bir Product yapısı işaretçisi bildirin
  4. Adres operatörünü kullanarak item değişkeninin adresini itemPtr değişkenine atayın
  5. Orijinal ürün bilgilerini, yapı üyelerine doğrudan erişerek (nokta operatörünü kullanarak) tam olarak şu formatta yazdırın:
    • Original Product Info:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  6. Aynı ürün bilgilerini, yapı üyelerine işaretçi aracılığıyla erişerek (dereference operatörü ve nokta notasyonunu kullanarak: (*itemPtr).member) tam olarak şu formatta yazdırın:
    • Product Info via Pointer:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  7. Bellek adreslerini tam olarak şu formatta yazdırarak işaretçinin yapıyı doğru şekilde gösterdiğini doğrulayın:
    • 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ın.

Bu görev; yapı işaretçisi bildirimi, adres operatörü kullanarak adres atama ve dereference operatörü ile nokta notasyonunu birleştirerek işaretçiler üzerinden yapı üyelerine erişim konusundaki anlayışınızı test eder. Ayrıca işaretçinin yapı değişkeninin adresini doğru şekilde tutup tutmadığını da doğrulayacaksınız.

Kopya kağıdı

Yapı (struct) işaretçilerini, diğer işaretçi bildirimleriyle aynı sözdizimini kullanarak oluşturabilirsiniz:

struct StructureName *pointerName;

Bir işaretçinin bir yapı değişkenini göstermesini sağlamak için adres operatörünü kullanın:

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

Yapı üyelerine bir işaretçi aracılığıyla erişmek için dolaylı başvuru (dereference) operatörünü ve nokta notasyonunu kullanın:

(*ptr).member

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.

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