Menu
Coddy logo textTech

Ok Operatörü (->)

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

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

Ok operatörü, bir işaretçi aracılığıyla yapı üyelerine 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ü kodunuzu daha temiz ve okunması daha kolay hâle getirir; özellikle karmaşık veri yapılarıyla çalışırken. C programlamada yapı üyelerine işaretçiler aracılığıyla erişmenin standart yoludur.

challenge icon

Görev

Kolay

İşaretçiler aracılığıyla yapı üyelerine erişmek için ok operatörünün kullanımını gösteren bir C programı oluştur. Programın şunları yapması gerekir:

  1. Aşağıdaki üyelere sahip struct adlı bir Book tanımla:
    • Kitap kimliğini depolamak için bir tamsayı id
    • Kitap başlığını depolamak için 40 boyutunda bir karakter dizisi title
    • Yazar adını depolamak için 30 boyutunda bir karakter dizisi author
    • Kitap fiyatını depolamak için bir kayan noktalı sayı price
    • Sayfa sayısını depolamak için bir tamsayı pages
  2. main işlevinde Book adlı bir myBook değişkeni oluştur
  3. Book adlı bir bookPtr yapısına işaretçi tanımla
  4. myBook adresini bookPtr'ye ata
  5. Aşağıdaki giriş değerlerini oku ve işaretçi üzerinden ok operatörünü kullanarak yapı üyelerine ata:
    • Kimlik için bir tamsayı oku ve bookPtr->id kullanarak ata
    • Başlık için bir dize oku ve bookPtr->title kullanarak ata
    • Yazar için bir dize oku ve bookPtr->author kullanarak ata
    • Fiyat için bir kayan noktalı sayı oku ve bookPtr->price kullanarak ata
    • Sayfa sayısı için bir tamsayı oku ve bookPtr->pages kullanarak ata
  6. Tüm değerleri okuduktan sonra ok operatörünü kullanarak aşağıdaki işlemleri gerçekleştir:
    • Fiyata %10 indirim uygula: bookPtr->price = bookPtr->price * 0.9;
    • 50 bonus sayfa ekle: bookPtr->pages += 50;
  7. Her üyeye erişmek için ok operatörünü kullanarak kitap bilgilerini tam olarak şu biçimde yazdır:
    • Book Information:
    • ID: [id]
    • Title: [title]
    • Author: [author]
    • Price: [price]
    • Pages: [pages]
  8. Ok operatörünü kullanarak sayfa başına fiyatı şu biçimde hesapla ve yazdır: Price per page: [price_per_page]

Bu alıştırma, işaretçiler aracılığıyla yapı üyelerine erişmek için ok operatörünü anladığını sınar. Yapı üyelerinden veri okumak ve yapı üyelerine veri yazmak için ptr->member söz dizimini kullanmayı; bunun (*ptr).member ile eşdeğer olduğunu, ancak çok daha kullanışlı ve okunabilir olduğunu göstererek pratik edeceksin.

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.

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

Kendi başına pratik yap: Online C derleyicisi