CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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

Soru
struct Person people[3];
people[0]____ = 30;
Cevap
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.

Orta seviye bölümündeki tüm dersler