Struct dizisi
- C kursu
- Orta seviye
- Ders 34/116
- 5 dk
Struct dizisi ve sıralamasını öğrenirsin.
Struct dizisi
Birden fazla struct'ı yönetmenin doğal yolu, bir struct dizisi oluşturmaktır. Bu, kayıt listeleri, tablolar ve koleksiyonlar için temel desendir.
Örnek: struct Person people[3];. Erişim: people[0].age = 30;. Burada people[0] bir struct değeridir; bu yüzden . operatörü kullanılır. Dizi boyutu sabit olmak zorundadır; dinamik boyut için işaretçi ve malloc gerekir. Döngüyle tüm elemanları dolaşmak yaygındır: for (int i = 0; i < 3; i++) printf("%d\n", people[i].age);.
qsort ile sıralama
Bir struct dizisini sıralamak için standart qsort fonksiyonunu kullanabilirsin. qsort, bir karşılaştırıcı callback alır; bu, fonksiyon işaretçisi kavramının struct'larla birleşimidir.
Çağrı: qsort(people, 3, sizeof(struct Person), compare);. Karşılaştırıcı imzası: int compare(const void *a, const void *b). İçerde işaretçiyi struct Person*'a dönüştürürsün: struct Person *pa = (struct Person*)a;. Sonra pa->age - pb->age döndürürsün. Bu desen, yaşa göre artan sıralama verir.
Uygulama Struct dizisini yazdır
struct Person tanımla: char name[32]; ve int age;. main içinde struct Person people[3] = {{"Ali", 30}, {"Ayşe", 25}, {"Veli", 35}}; tanımla. for döngüsüyle her elemanın age alanını printf("%d\n", people[i].age); ile yazdır.
Başlangıç kodu
#include <stdio.h>
// struct Person tanımla (name[32] ve age)
// main'de 3 elemanlı people dizisini tanımla ve başlat
// for döngüsüyle her elemanın age alanını yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
struct Person {
char name[32];
int age;
};
int main(void) {
struct Person people[3] = {{"Ali", 30}, {"Ayşe", 25}, {"Veli", 35}};
for (int i = 0; i < 3; i++) {
printf("%d\n", people[i].age);
}
return 0;
}Beklenen çıktı
30 25 35
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Dizi ifadelerini eşle
| Kavram | Anlamı |
|---|---|
people[0].age |
İlk elemanın alanı |
people[i] |
İndeksli eleman |
struct Person people[3] |
Dizi tanımı |
people[2].name |
Son elemanın alanı |
2 Dizi elemanının alanını ata
struct Person people[3];
people[0]____ = 30;
struct Person people[3];
people[0].age = 30;
Açıklama: people[0] değerdir; .age ile erişilir.
3 struct dizisini yaşa göre sıralamak için?
- strcpy
- malloc
- fopen
- qsort + karşılaştırıcı Doğru cevap
Açıklama: qsort bir karşılaştırıcı callback alır ve struct dizisini sıralar.