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
#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
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ı
struct Book *books = ____(2 * sizeof(struct Book));
struct Book *books = malloc(2 * sizeof(struct Book));
Açıklama: malloc(2 * sizeof(struct Book)) iki kitap için yer ayırır.