Menu
Coddy logo textTech

Yapıları Değer ile Aktarma

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

Artık yapılarla ve yapı işaretçileriyle nasıl çalışacağını bildiğine göre, yapıların tamamını işlevlere nasıl aktaracağını öğrenmenin zamanı geldi. Bir yapıyı bir işleve parametre olarak aktardığında, C değerle aktarma yöntemini kullanır; bu, işlevin yapının eksiksiz bir kopyasını aldığı anlamına gelir.

İşte bir yapı parametresini kabul eden bir fonksiyonun söz dizimi:

void functionName(struct StructureName parameterName) {
    // Fonksiyon gövdesi
}

Tanıdık Point struct'ımızı örnek olarak kullanarak:

void printPoint(struct Point p) {
    printf("Point coordinates: (%d, %d)\n", p.x, p.y);
}

Anlaşılması gereken temel kavram, fonksiyonun içinde struct üzerinde yaptığınız hiçbir değişikliğin çağıran fonksiyondaki özgün struct'ı etkilemeyeceğidir. Bunun nedeni, fonksiyonun verilerin kendi kopyasıyla çalışmasıdır.

Bu yaklaşım, özgün verilerde yanlışlıkla değişiklik yapma riski olmadan struct verilerini okumak veya görüntülemek istediğinizde kullanışlıdır. Ancak büyük struct'ları kopyalamanın bellek ve performans açısından verimsiz olabileceğini unutmayın.

challenge icon

Görev

Kolay

Struct'ları değerle fonksiyonlara geçirmeyi gösteren bir C programı oluştur. Programın şunları yapması gerekir:

  1. Aşağıdaki üyelerle struct adlı bir Rectangle tanımla:
    • Dikdörtgenin genişliğini saklamak için bir tamsayı width
    • Dikdörtgenin yüksekliğini saklamak için bir tamsayı height
    • Dikdörtgenin rengini saklamak için boyutu 15 olan bir karakter dizisi color
  2. Şunları yapan displayRectangle adlı bir fonksiyon yaz:
    • Parametre olarak bir Rectangle struct'ı alır (değerle geçirme)
    • Dikdörtgen bilgilerini tam olarak şu biçimde yazdırır:
      • Rectangle Details:
      • Width: [width]
      • Height: [height]
      • Color: [color]
      • Area: [area]
    • Alanı (genişlik × yükseklik) hesaplar ve yazdırır
  3. Şunları yapan modifyRectangle adlı bir fonksiyon yaz:
    • Parametre olarak bir Rectangle struct'ı alır (değerle geçirme)
    • Dikdörtgenin hem genişliğini hem de yüksekliğini iki katına çıkarır
    • Rengi "Modified" olarak değiştirir
    • Inside modifyRectangle function: ifadesini yazdırır
    • Değiştirilmiş dikdörtgeni göstermek için displayRectangle fonksiyonunu çağırır
  4. main fonksiyonunda:
    • Rectangle adlı bir rect değişkeni oluştur
    • Genişliği, yüksekliği ve rengi girdiden oku ve struct üyelerine ata
    • Original rectangle: ifadesini yazdır
    • Özgün dikdörtgeni göstermek için displayRectangle fonksiyonunu çağır
    • Dikdörtgeni parametre olarak vererek modifyRectangle fonksiyonunu çağır
    • After modifyRectangle call: ifadesini yazdır
    • Özgün dikdörtgenin değişmediğini göstermek için displayRectangle fonksiyonunu tekrar çağır

Bu görev, struct'larla değerle geçirme kavramını gösterir: bir struct'ı bir fonksiyona geçirdiğinde, fonksiyon struct'ın eksiksiz bir kopyasını alır. Fonksiyon içinde yapılan değişiklikler yalnızca kopyayı etkiler; çağıran fonksiyondaki özgün struct'ı etkilemez.

Kendin dene

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

// TODO: Rectangle yapısını burada tanımlayın

// TODO: displayRectangle fonksiyonunu burada yazın

// TODO: modifyRectangle fonksiyonunu burada yazın

int main() {
    // Girdiyi oku
    int width, height;
    char color[15];
    
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%s", color);
    
    // TODO: Rectangle değişkenini oluşturun ve girdi değerlerini atayın
    
    // TODO: "Original rectangle:" yazdırın ve displayRectangle fonksiyonunu çağırın
    
    // TODO: modifyRectangle fonksiyonunu çağırın
    
    // TODO: "After modifyRectangle call:" yazdırın ve displayRectangle fonksiyonunu tekrar çağı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