Menu
Coddy logo textTech

Ok Operatörü (->)

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

Yapı (struct) işaretçileriyle çalışırken, yapı üyelerine erişmek özel bir söz dizimi gerektirir. Dereferans (dereference) operatörünü ve nokta notasyonunu birlikte kullanabilseniz de, C bu amaç için özel olarak daha kullanışlı bir operatör sağlar: ok operatörü (->).

Ok operatörü, struct üyelerine bir işaretçi aracılığıyla temiz ve okunabilir bir şekilde erişmenizi sağlar:

ptr->member

Bu, (*ptr).member yazmaya eşdeğerdir, ancak çok daha kısadır.

İşte pratikte nasıl çalıştığı:

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

// Ok operatörü kullanımı
printf("x = %d, y = %d\n", ptr->x, ptr->y);

// Bu şununla aynıdır:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);

Ok operatörü, özellikle karmaşık veri yapılarıyla çalışırken kodunuzu daha temiz ve okunması daha kolay hale getirir. C programlamada işaretçiler (pointers) aracılığıyla struct üyelerine erişmenin standart yoludur.

challenge icon

Görev

Kolay

İşaretçiler aracılığıyla struct üyelerine erişmek için ok operatörünün kullanımını gösteren bir C programı oluşturun. Programınız şunları yapmalıdır:

  1. Aşağıdaki üyelere sahip Book adında bir struct tanımlayın:
    • Kitap kimliğini saklamak için bir tam sayı id
    • Kitap başlığını saklamak için 40 boyutunda bir karakter dizisi title
    • Yazar adını saklamak için 30 boyutunda bir karakter dizisi author
    • Kitap fiyatını saklamak için bir float price
    • Sayfa sayısını saklamak için bir tam sayı pages
  2. Ana fonksiyonda, myBook adında bir Book değişkeni oluşturun
  3. bookPtr adında bir Book struct işaretçisi bildirin
  4. myBook adresini bookPtr'ye atayın
  5. Aşağıdaki giriş değerlerini okuyun ve işaretçi üzerinden ok operatörünü kullanarak struct üyelerine atayın:
    • ID için bir tam sayı okuyun ve bookPtr->id kullanarak atayın
    • Başlık için bir dize okuyun ve bookPtr->title kullanarak atayın
    • Yazar için bir dize okuyun ve bookPtr->author kullanarak atayın
    • Fiyat için bir float okuyun ve bookPtr->price kullanarak atayın
    • Sayfa sayısı için bir tam sayı okuyun ve bookPtr->pages kullanarak atayın
  6. Tüm değerleri okuduktan sonra, ok operatörünü kullanarak aşağıdaki işlemleri gerçekleştirin:
    • Fiyata %10 indirim uygulayın: bookPtr->price = bookPtr->price * 0.9;
    • 50 bonus sayfa ekleyin: bookPtr->pages += 50;
  7. Her bir üyeye erişmek için ok operatörünü kullanarak kitap bilgilerini tam olarak şu formatta yazdırın:
    • Book Information:
    • ID: [id]
    • Title: [title]
    • Author: [author]
    • Price: [price]
    • Pages: [pages]
  8. Ok operatörünü kullanarak sayfa başına fiyatı şu formatta hesaplayın ve yazdırın: Price per page: [price_per_page]

Bu meydan okuma, işaretçiler aracılığıyla struct üyelerine erişmek için ok operatörünü anlama düzeyinizi test eder. Struct üyelerinden hem okuma hem de yazma yapmak için ptr->member sözdizimini kullanma pratiği yapacaksınız; bu, (*ptr).member ile eşdeğer olduğunu ancak çok daha kullanışlı ve okunabilir olduğunu gösterir.

Kendin dene

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

// TODO: Book struct yapısını burada tanımlayın

int main() {
    // TODO: myBook adında bir Book değişkeni oluşturun
    
    // TODO: bookPtr adında Book türünde bir işaretçi (pointer) bildirin
    
    // TODO: myBook değişkeninin adresini bookPtr işaretçisine atayın
    
    // Giriş değerlerini oku
    int id;
    char title[40];
    char author[30];
    float price;
    int pages;
    
    scanf("%d", &id);
    scanf("%s", title);
    scanf("%s", author);
    scanf("%f", &price);
    scanf("%d", &pages);
    
    // TODO: Ok operatörünü kullanarak giriş değerlerini struct üyelerine atayın
    
    // TODO: Ok operatörünü kullanarak price değerine %10 indirim uygulayın
    
    // TODO: Ok operatörünü kullanarak 50 bonus sayfa ekleyin
    
    // TODO: Ok operatörünü kullanarak kitap bilgilerini yazdırın
    
    // TODO: Ok operatörünü kullanarak sayfa başına fiyatı hesaplayın ve 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