CodeBlanks Logo Icon CodeBlanks

Birleştirme

  • C kursu
  • Başlangıç
  • Ders 116/116
  • 6 dk

Tüm parçaları birleştirerek çalışan bir final uygulaması yazarsın.

Birleştirme: dinamik katalog

Son derste tüm parçaları birleştirirsin: struct Book, print_book, malloc ve free. Dinamik bir kitap dizisi oluşturup yazdırır ve serbest bırakırsın.

struct Book *books = malloc(2 * sizeof(struct Book));
strcpy(books[0].title, "Suç ve Ceza");
books[0].year = 1866;
print_book(books[0]);
free(books);

Burada books bir işaretçidir ama dizi gibi [index] ile kullanılır. books[0].title zinciri, işaretçiyi dizi gibi ele alır. Bu, C'deki işaretçi-dizi equivalansının gücünü gösterir.

Dinamik katalogun özeti

Bu projede beş adımda bir kitap kataloğu kurduk: struct Book, kitap dizisi, print_book fonksiyonu, malloc ile dinamik bellek ve son birleştirme.

struct Book *books = malloc(2 * sizeof(struct Book));
/* iki kitabı ata */
print_book(books[0]);
print_book(books[1]);
free(books);

Bu, gerçek bir C uygulamasının iskeletidir: veri modeli, fonksiyonlar, bellek yönetimi ve birleştirme. Buradan büyük projelere uzanmak, yalnızca bu parçaları daha çok veri ve daha çok fonksiyonla çoğaltmaktır.

Uygulama Dinamik kataloğu kur ve yazdır

malloc(2 * sizeof(struct Book)) ile iki kitaplık dinamik dizi ayır. strcpy ile books[0].title'ı "Suç ve Ceza", books[1].title'ı "Sefiller" yap; yılları 1866 ve 1862 ata. print_book ile iki kitabı yazdır; free(books) ile belleği bırak.

Başlangıç kodu

main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Book {
    char title[32];
    int year;
};

void print_book(struct Book b) {
    printf("%s %d\n", b.title, b.year);
}

// malloc ile 2 kitaplık dizi ayır; strcpy ile başlık ata; print_book ile yazdır; free ile bırak
int main(void) {
    return 0;
}

Örnek çözüm

main.c
struct Book *books = malloc(2 * sizeof(struct Book));
strcpy(books[0].title, "Suç ve Ceza");
books[0].year = 1866;
strcpy(books[1].title, "Sefiller");
books[1].year = 1862;
print_book(books[0]);
print_book(books[1]);
free(books);

Beklenen çıktı

Suç ve Ceza 1866
Sefiller 1862

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Kavram ve kullanım eşleştir

Kavram Anlamı
malloc Dinamik dizi
books[0] İlk eleman
print_book Yazdırma
free Serbest bırakma

2 books bir işaretçiyken books[0].title erişimi nasıl çalışır?

  • Üye silinir
  • Çalışmaz; hata verir
  • Sadece -> operatörü geçerli
  • İşaretçi dizi gibi ele alınır Doğru cevap

Açıklama: C'de işaretçi ve dizi eşdeğerdir; books[0] geçerli.

3 Boşluğu doldur: dinamik dizi ayrımı

Soru
struct Book *books = ____(2 * sizeof(struct Book));
Cevap
struct Book *books = malloc(2 * sizeof(struct Book));

Açıklama: malloc(2 * sizeof(struct Book)) iki kitap için yer ayırır.

Başlangıç bölümündeki tüm dersler