C Cheat Sheet: ściąga z języka C
Ostatnia aktualizacja
Hello World i struktura programu
Każdy program w C zaczyna się od main i zwraca int.
| Element | Kod |
|---|---|
| Dołączenie nagłówka | #include <stdio.h> |
| Punkt wejścia | int main(void) { ... } |
| Z argumentami wiersza poleceń | int main(int argc, char *argv[]) { ... } |
| Wypisanie linii | printf("Hello, World!\n"); |
| Zwrócenie sukcesu | return 0; |
| Komentarz jednoliniowy | // comment |
| Komentarz blokowy | /* comment */ |
Typy danych
Rozmiary zależą od platformy; poniższe minima gwarantuje standard.
| Typ | Opis |
|---|---|
int | Liczba całkowita, co najmniej 16 bitów (zwykle 32) |
unsigned int | Nieujemna liczba całkowita |
long / long long | Szersze liczby całkowite (co najmniej 32 / 64 bity) |
float / double | Liczba zmiennoprzecinkowa pojedynczej / podwójnej precyzji |
char | Pojedynczy bajt, używany też do znaków |
_Bool (bool przez <stdbool.h>) | true lub false |
size_t | Typ bez znaku dla rozmiarów i indeksów |
void | Brak typu: używany w funkcjach i wskaźnikach ogólnych |
Specyfikatory formatu printf i scanf
Symbole zastępcze dopasowane do typu każdego argumentu.
| Specyfikator | Pasuje do |
|---|---|
%d / %i | int ze znakiem |
%u | int bez znaku |
%ld / %lld | long / long long |
%f | double (i float w printf) |
%.2f | double z 2 miejscami po przecinku |
%c | Pojedynczy char |
%s | Łańcuch znaków (char *) |
%p | Adres wskaźnika |
%x | int bez znaku w zapisie szesnastkowym |
%zu | size_t |
Operatory
| Operator | Znaczenie |
|---|---|
+ - * / % | Arytmetyka (% to reszta z dzielenia całkowitego) |
== != | Równe / różne |
< > <= >= | Porównanie |
&& || ! | Logiczne i / lub / nie |
& | ^ ~ << >> | Bitowe and, or, xor, not, przesunięcia |
++ -- | Inkrementacja / dekrementacja |
+= -= *= /= | Przypisanie złożone |
cond ? a : b | Operator warunkowy (trójargumentowy) |
sizeof(x) | Rozmiar typu lub zmiennej w bajtach |
Sterowanie przepływem
| Instrukcja | Składnia |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Else if | else if (x == 0) { ... } |
| Switch | switch (n) { case 1: ...; break; default: ...; } |
| Pętla while | while (i < n) { ... } |
| Pętla do-while | do { ... } while (i < n); |
| Pętla for | for (int i = 0; i < n; i++) { ... } |
| Break / continue | break; wychodzi z pętli, continue; przechodzi do następnej iteracji |
| Goto (rzadko) | goto label; ... label: |
Funkcje
Zadeklaruj funkcję przed użyciem albo dodaj prototyp na początku pliku.
| Operacja | Składnia |
|---|---|
| Definicja funkcji | int add(int a, int b) { return a + b; } |
| Prototyp (deklaracja) | int add(int a, int b); |
| Bez wartości zwracanej | void greet(void) { ... } |
| Bez parametrów | int rand_seed(void) { ... } |
| Przekazanie przez wskaźnik (modyfikacja) | void inc(int *p) { (*p)++; } |
| Przekazanie tablicy | int sum(int arr[], int n) { ... } |
| Static (lokalna w pliku) | static int helper(void) { ... } |
Wskaźniki i pamięć
Wskaźnik przechowuje adres. Pamięć na stercie trzeba zwalniać ręcznie.
| Operacja | Składnia |
|---|---|
| Deklaracja wskaźnika | int *p; |
| Pobranie adresu | p = &x; |
| Dereferencja (odczyt/zapis) | int y = *p; / *p = 10; |
| Wskaźnik pusty | int *p = NULL; |
| Alokacja na stercie | int *a = malloc(n * sizeof(int)); |
| Alokacja + zerowanie | int *a = calloc(n, sizeof(int)); |
| Zmiana rozmiaru alokacji | a = realloc(a, newSize); |
| Zwolnienie pamięci na stercie | free(a); |
| Arytmetyka wskaźników | *(a + i) to to samo co a[i] |
Tablice i łańcuchy znaków
Łańcuchy w C to tablice char zakończone znakiem \0.
| Operacja | Składnia |
|---|---|
| Deklaracja tablicy | int nums[5]; |
| Inicjalizacja tablicy | int nums[] = {1, 2, 3}; |
| Dostęp do elementu | nums[0] = 10; |
| Długość tablicy (tablice na stosie) | sizeof(nums) / sizeof(nums[0]) |
| Literał łańcuchowy | char s[] = "hello"; |
| Długość łańcucha | strlen(s) (bez \0) |
| Kopiowanie łańcucha | strcpy(dst, src); |
| Porównanie łańcuchów | strcmp(a, b) == 0 oznacza równość |
| Łączenie łańcuchów | strcat(dst, src); |
Struktury i popularne funkcje biblioteki standardowej
| Operacja | Składnia |
|---|---|
| Definicja struktury | struct Point { int x; int y; }; |
| Deklaracja i dostęp | struct Point p; p.x = 1; |
| Dostęp przez wskaźnik | p->x = 1; (to samo co (*p).x) |
| Alias typu | typedef struct Point Point; |
| Odczyt danych wejściowych | scanf("%d", &n); |
| Zamiana łańcucha na int | int n = atoi("42"); |
| Wartość bezwzględna / potęga | abs(x) (int), pow(x, y) z <math.h> |
| Sortowanie tablicy | qsort(arr, n, sizeof(int), cmp); |
Najczęściej używana składnia C, specyfikatory formatu i wzorce pracy ze wskaźnikami na jednej stronie. Ten C cheat sheet to szybka ściąga do pisania w C: typy danych, specyfikatory printf/scanf, operatory, sterowanie przepływem oraz operacje na wskaźnikach i pamięci, na których wiele osób się potyka.
Wszystko tutaj to standardowe C (C99/C11), które kompiluje się w gcc lub clang. Skopiuj to, czego potrzebujesz, albo uruchom dowolny fragment w edytorze online C, bez instalowania kompilatora. Uczysz się C? Darmowy interaktywny kurs C w Coddy uczy w praktyce wskaźników, pamięci i biblioteki standardowej.
C cheat sheet: najczęstsze pytania
Czy ten C cheat sheet jest darmowy?
Czym różni się stos od sterty w C?
malloc lub calloc, istnieje do wywołania free i używa się jej, gdy pamięć ma przetrwać bieżącą funkcję albo jej rozmiar jest znany dopiero w czasie działania programu. Brak free dla pamięci na stercie powoduje wyciek pamięci.Dlaczego scanf potrzebuje ampersandu (&), a printf nie?
scanf zapisuje wartość z powrotem do zmiennej, więc potrzebuje adresu zmiennej, a właśnie to daje &x. printf tylko odczytuje wartość, więc przekazujesz samą wartość. Wyjątkiem są łańcuchy: tablica char sama zamienia się we wskaźnik, dlatego piszesz scanf("%s", name) bez &.