Menu
Coddy logo textTech

Stack İlklendirme

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 14 / 61.

Her nesnenin yığında yaşaması gerekmez. Bir struct küçük ve kısa ömürlü olduğunda, onu yığında ayırmak daha basit ve hızlıdır: malloc yok, free yok, bellek sızıntısı riski yok.

Bir işlev, bir işaretçi döndürmek yerine yapıyı değer olarak döndürebilir. Yapının tamamı çağırana kopyalanır:

typedef struct {
    int x;
    int y;
} Point;

Point create_point(int x, int y) {
    Point p;
    p.x = x;
    p.y = y;
    return p;
}

Çağıran, tamamen başlatılmış bir kopya alır:

Point origin = create_point(0, 0);
Point cursor = create_point(100, 50);
printf("Cursor: (%d, %d)\n", cursor.x, cursor.y);

İşaretçi yok, temizleme gerekmiyor. origin ve cursor kapsam dışına çıktığında otomatik olarak yok edilirler.

Bu yaklaşım, dinamik olarak ayrılmış üyeler içermeyen küçük struct'lar için en iyi şekilde çalışır. Daha büyük nesneler veya heap belleğine işaretçiler içeren nesneler için malloc kullanan kurucu kalıbı daha iyi bir seçenek olmaya devam eder.

challenge icon

Görev

Kolay

Bir fabrika işlevi kullanarak yığın üzerinde sıcaklık okumaları oluşturan bir Temperature modülü oluşturalım. Önceki derslerdeki yığın tabanlı oluşturucuların aksine bu yaklaşım, yapıyı değer olarak döndürür: malloc yok, free yok; yalnızca basit ve verimli yığın tahsisi vardır.

Üç dosya oluşturacaksınız:

  • temperature.h: İki üyeye sahip bir Temperature yapısı bildirin: double celsius ve Celsius değerini belirtmek üzere 'C' saklayan char scale. Ayrıca iki işlev bildirin:
    • create_temperature: bir double değer alır ve değer olarak (işaretçi olarak değil!) bir Temperature yapısı döndürür
    • temperature_to_fahrenheit: bir const Temperature * alır ve eşdeğer Fahrenheit sıcaklığını double olarak döndürür
    TEMPERATURE_H sembolüyle include korumaları kullanın.
  • temperature.c: Her iki işlevi de uygulayın. Fabrika işleviniz yerel bir Temperature değişkeni oluşturmalı, alanlarını başlatmalı (scale değerini 'C' olarak ayarlamalı) ve bu değişkeni döndürmelidir. Dönüşüm formülü şöyledir: fahrenheit = celsius * 9.0 / 5.0 + 32.0
  • main.c: Bir sıcaklık okuması oluşturmak ve hem Celsius hem de Fahrenheit değerlerini görüntülemek için fabrika işlevinizi kullanın.

Bir girdi alacaksınız: Celsius cinsinden sıcaklık (double olarak).

Ana dosyanızda, verilen değerle bir Temperature yapısı oluşturmak için create_temperature kullanın. Ardından orijinal Celsius değerini ve bunun Fahrenheit karşılığını yazdırın.

Çıktıyı şu biçimde yazdırın:

Celsius: {celsius}
Fahrenheit: {fahrenheit}

Her iki değeri de iki ondalık basamakla görüntülemek için %.2f kullanın.

Örneğin, 25.0 girdisiyle çıktı şöyle olur:

Celsius: 25.00
Fahrenheit: 77.00

Bu yaklaşımın ne kadar temiz olduğuna dikkat edin. Bellek yönetimiyle ilgili herhangi bir kaygı olmadan tamamen başlatılmış bir yapı elde edersiniz. Temperature değişkeniniz kapsam dışına çıktığında otomatik olarak temizlenir.

Kendin dene

#include <stdio.h>
#include "temperature.h"

int main() {
    double celsius_input;
    scanf("%lf", &celsius_input);
    
    // TODO: Bir Temperature struct oluşturmak için create_temperature kullan
    
    // TODO: Celsius değerini %.2f formatını kullanarak yazdır
    
    // TODO: Fahrenheit değerini dönüştürüp yazdırmak için temperature_to_fahrenheit kullan
    
    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.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi