C Hile Sayfası
Son güncelleme
Hello World ve program yapısı
Her C programı main'de başlar ve bir int döndürür.
| Element | Kod |
|---|---|
| Bir başlık ekle (include) | #include <stdio.h> |
| Giriş noktası | int main(void) { ... } |
| Komut satırı argümanlarıyla | int main(int argc, char *argv[]) { ... } |
| Bir satır yazdır | printf("Hello, World!\n"); |
| Başarıyı döndür | return 0; |
| Tek satırlık yorum | // comment |
| Blok yorum | /* comment */ |
Veri tipleri
Boyutlar platforma bağlıdır; aşağıdaki minimumlar standart tarafından garanti edilir.
| Tip | Açıklama |
|---|---|
int | Tam sayı, en az 16 bit (genellikle 32) |
unsigned int | Negatif olmayan tam sayı |
long / long long | Daha geniş tam sayılar (en az 32 / 64 bit) |
float / double | Tek / çift duyarlıklı kayan nokta |
char | Tek bayt, karakterler için de kullanılır |
_Bool (<stdbool.h> ile bool) | true veya false |
size_t | Boyutlar ve indeksler için işaretsiz tip |
void | Tip yok - fonksiyonlar ve generic işaretçiler için kullanılır |
printf ve scanf biçim belirteçleri
Her argümanın tipiyle eşleşen yer tutucular.
| Belirteç | Eşleştirir |
|---|---|
%d / %i | İşaretli int |
%u | İşaretsiz int |
%ld / %lld | long / long long |
%f | double (ve printf'te float) |
%.2f | 2 ondalık basamaklı double |
%c | Tek char |
%s | Dize (char *) |
%p | İşaretçi adresi |
%x | Onaltılık tabanda işaretsiz int |
%zu | size_t |
Operatörler
| Operatör | Anlamı |
|---|---|
+ - * / % | Aritmetik (% tam sayı kalanı) |
== != | Eşit / eşit değil |
< > <= >= | Karşılaştırma |
&& || ! | Mantıksal ve / veya / değil |
& | ^ ~ << >> | Bit düzeyinde ve, veya, xor, değil, kaydırmalar |
++ -- | Artırma / azaltma |
+= -= *= /= | Bileşik atama |
cond ? a : b | Üçlü koşul |
sizeof(x) | Bir tipin veya değişkenin bayt cinsinden boyutu |
Kontrol akışı
| İfade | Söz dizimi |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Else if | else if (x == 0) { ... } |
| Switch | switch (n) { case 1: ...; break; default: ...; } |
| While döngüsü | while (i < n) { ... } |
| Do-while döngüsü | do { ... } while (i < n); |
| For döngüsü | for (int i = 0; i < n; i++) { ... } |
| Break / continue | break; bir döngüden çıkar, continue; bir sonraki yinelemeye atlar |
| Goto (nadir) | goto label; ... label: |
Fonksiyonlar
Kullanmadan önce tanımlayın ya da dosyanın başına bir prototip ekleyin.
| İşlem | Söz dizimi |
|---|---|
| Bir fonksiyon tanımla | int add(int a, int b) { return a + b; } |
| Prototip (bildirim) | int add(int a, int b); |
| Geri dönüş değeri yok | void greet(void) { ... } |
| Parametre yok | int rand_seed(void) { ... } |
| İşaretçiyle geçir (değiştir) | void inc(int *p) { (*p)++; } |
| Bir dizi geçir | int sum(int arr[], int n) { ... } |
| Static (dosya yerel) | static int helper(void) { ... } |
İşaretçiler ve bellek
Bir işaretçi bir adres tutar. Heap belleği manuel olarak serbest bırakılmalıdır.
| İşlem | Söz dizimi |
|---|---|
| Bir işaretçi tanımla | int *p; |
| Adresini al | p = &x; |
| Değerine eriş (oku/yaz) | int y = *p; / *p = 10; |
| Null işaretçi | int *p = NULL; |
| Heap'te ayır | int *a = malloc(n * sizeof(int)); |
| Ayır + sıfırla | int *a = calloc(n, sizeof(int)); |
| Bir ayırmayı yeniden boyutlandır | a = realloc(a, newSize); |
| Heap belleğini serbest bırak | free(a); |
| İşaretçi aritmetiği | *(a + i), a[i] ile aynıdır |
Diziler ve dizeler
C'de dizeler, \0 ile sonlandırılan char dizileridir.
| İşlem | Söz dizimi |
|---|---|
| Bir dizi tanımla | int nums[5]; |
| Bir diziye ilk değer ata | int nums[] = {1, 2, 3}; |
| Bir elemana eriş | nums[0] = 10; |
| Dizi uzunluğu (stack dizileri) | sizeof(nums) / sizeof(nums[0]) |
| Dize değişmezi | char s[] = "hello"; |
| Dize uzunluğu | strlen(s) (\0'ı hariç tutar) |
| Bir dizeyi kopyala | strcpy(dst, src); |
| Dizeleri karşılaştır | strcmp(a, b) == 0 eşit anlamına gelir |
| Dizeleri birleştir | strcat(dst, src); |
Struct'lar ve yaygın stdlib
| İşlem | Söz dizimi |
|---|---|
| Bir struct tanımla | struct Point { int x; int y; }; |
| Tanımla ve eriş | struct Point p; p.x = 1; |
| İşaretçiyle eriş | p->x = 1; ((*p).x ile aynı) |
| Tip takma adı | typedef struct Point Point; |
| Girdi oku | scanf("%d", &n); |
| Dizeyi int'e dönüştür | int n = atoi("42"); |
| Mutlak değer / üs | abs(x) (int), <math.h>'den pow(x, y) |
| Bir diziyi sırala | qsort(arr, n, sizeof(int), cmp); |
En çok başvurduğunuz C söz dizimi, biçim belirteçleri ve işaretçi desenleri tek sayfada. Bu C hile sayfası, C yazmak için hızlı bir başvurudur - veri tipleri, printf/scanf belirteçleri, operatörler, kontrol akışı ve insanları zorlayan işaretçi ve bellek işlemleri.
Buradaki her şey standart C'dir (C99/C11) ve gcc veya clang ile derlenir. İhtiyacınız olanı kopyalayın ya da herhangi bir kod parçasını C playground'da canlı deneyin - kurmanız gereken bir derleyici yok.
C hile sayfası SSS
Bu C hile sayfası ücretsiz mi?
C'de stack ile heap arasındaki fark nedir?
malloc veya calloc ile açıkça ayrılır, siz free çağırana kadar yaşar ve geçerli fonksiyondan daha uzun yaşaması gereken ya da boyutu yalnızca çalışma zamanında bilinen bellek gerektiğinde kullanılır. Heap belleğini free etmeyi unutmak bir bellek sızıntısına neden olur.Neden scanf bir ampersand (&) gerektirir ama printf gerektirmez?
scanf değeri tekrar değişkeninize yazar, dolayısıyla değişkenin adresine ihtiyaç duyar - işte &x ona bunu verir. printf yalnızca değeri okur, bu yüzden değerin kendisini geçirirsiniz. İstisna dizelerdir: bir char dizisi zaten bir işaretçiye dönüşür, dolayısıyla & olmadan scanf("%s", name) geçirirsiniz.