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özdizimi gerektirir. Dereferans (dereference) operatörünü ve nokta notasyonunu birlikte kullanabilseniz de, C özellikle bu amaç için 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 özlüdür.

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

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

// Ok operatörünü kullanma
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 pointer'lar 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. Main fonksiyonu içinde, myBook adında bir Book değişkeni oluşturun
  3. bookPtr adında bir Book struct işaretçisi bildirin
  4. myBook değişkeninin adresini bookPtr işaretçisine 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 onlara 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.

Kopya kağıdı

Ok operatörü (->), bir işaretçi aracılığıyla struct üyelerine erişmek için elverişli bir yol sağlar:

ptr->member

Bu, (*ptr).member ile eşdeğerdir ancak daha kısa ve okunabilirdir.

Örnek kullanım:

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

// Ok operatörünü kullanma
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);

Kendin dene

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

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

int main() {
    // YAPILACAK: myBook adında bir Book değişkeni oluşturun
    
    // YAPILACAK: bookPtr adında Book türünde bir işaretçi (pointer) tanımlayın
    
    // YAPILACAK: myBook'un adresini bookPtr'ye 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);
    
    // YAPILACAK: Ok operatörünü kullanarak giriş değerlerini yapı üyelerine atayın
    
    // YAPILACAK: Ok operatörünü kullanarak fiyata %10 indirim uygulayın
    
    // YAPILACAK: Ok operatörünü kullanarak 50 bonus sayfa ekleyin
    
    // YAPILACAK: Ok operatörünü kullanarak kitap bilgilerini yazdırın
    
    // YAPILACAK: 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