stdlib.h
- C kursu
- Orta seviye
- Ders 82/116
- 4 dk
stdlib.h içindeki malloc, exit, atoi gibi fonksiyonları öğrenirsin.
stdlib.h
<stdlib.h> başlığı, C'nin en çok kullanılan genel amaçlı işlevlerini içerir: bellek ayırma (malloc), programdan çıkış (exit), dizgi–sayı dönüşümü (atoi) ve hızlı sıralama (qsort).
malloc'u önceki gruplarda gördün; şimdi diğer üçüne bakalım. exit(1) programı hemen sonlandırır; hata durumunda kullanılır. atoi("42") bir dizgiyi tamsayıya çevirir ve 42 döndürür; dönüştürülemeyen karakterlerde 0 verir. qsort bir diziyi sıralar; bir karşılaştırma işlevi ister. Bu işlevler C programlarının temel yapı taşlarıdır; neredeyse her gerçek projede kullanılırlar.
qsort kullanımı
qsort genel amaçlı bir sıralama işlevidir. Herhangi bir türdeki diziyi sıralayabilir; bunun için bir karşılaştırma işlevi ister.
İmza: void qsort(void *base, size_t count, size_t size, int (*cmp)(const void *, const void *)). base dizinin başlangıcı, count eleman sayısı, size her elemanın bayt büyüklüğü, cmp ise karşılaştırma işlevidir. Karşılaştırma işlevi iki const void * alır ve negatif, sıfır ya da pozitif döndürür. Örnek: int cmp(const void *a, const void *b) { return *(int*)a - *(int*)b; }. Bu, iki tamsayıyı küçükten büyüğe sıralar. Çağrı: qsort(arr, 3, sizeof(int), cmp);. Artık arr sıralıdır.
Uygulama atoi ve qsort
int cmp(const void *a, const void *b) yaz: return *(int*)a - *(int*)b;. main'de const char *s = "42";, int n = atoi(s);, int arr[] = {3, 1, 2};, qsort(arr, 3, sizeof(int), cmp);, printf("%d %d %d %d\n", n, arr[0], arr[1], arr[2]);.
Başlangıç kodu
#include <stdio.h>
#include <stdlib.h>
// cmp: iki int'i karşılaştır (qsort için)
// main: atoi ile "42" dizgisini tamsayıya çevir
// {3, 1, 2} dizisini qsort ile sırala
// printf ile n ve sıralı diziyi yazdır
int main(void) {
// buraya yaz
return 0;
}Örnek çözüm
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main(void) {
const char *s = "42";
int n = atoi(s);
int arr[] = {3, 1, 2};
qsort(arr, 3, sizeof(int), cmp);
printf("%d %d %d %d\n", n, arr[0], arr[1], arr[2]);
return 0;
}Beklenen çıktı
42 1 2 3
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 atoi("42") çağrısı ne döndürür?
- 0 (hata)
- "42" (dizgi)
- 42 (tamsayı) Doğru cevap
- 42.0 (ondalık)
Açıklama: atoi bir dizgiyi tamsayıya çevirir; "42" → 42.
2 stdlib işlevleri
| Kavram | Anlamı |
|---|---|
malloc |
bellek ayır |
exit |
programdan çık |
atoi |
dizgiyi sayı yap |
qsort |
diziyi sırala |
3 qsort çağrısı
qsort(arr, 3, sizeof(int), ____);
qsort(arr, 3, sizeof(int), cmp);
Açıklama: qsort'un son parametresi karşılaştırma işlevidir.