C Cheat Sheet: דף עזר מהיר
עודכן לאחרונה
Hello World ומבנה התוכנית
כל תוכנית C מתחילה ב-main ומחזירה int.
| רכיב | קוד |
|---|---|
| הכללת קובץ כותרת | #include <stdio.h> |
| נקודת כניסה | int main(void) { ... } |
| עם ארגומנטים משורת הפקודה | int main(int argc, char *argv[]) { ... } |
| הדפסת שורה | printf("Hello, World!\n"); |
| החזרת הצלחה | return 0; |
| הערה בשורה אחת | // comment |
| הערת בלוק | /* comment */ |
טיפוסי נתונים
הגדלים תלויים בפלטפורמה; המינימום שלמטה מובטח על ידי התקן.
| טיפוס | תיאור |
|---|---|
int | מספר שלם, לפחות 16 ביט (בדרך כלל 32) |
unsigned int | מספר שלם אי-שלילי |
long / long long | מספרים שלמים רחבים יותר (לפחות 32 / 64 ביט) |
float / double | נקודה צפה בדיוק יחיד / כפול |
char | בייט יחיד, משמש גם לתווים |
_Bool (bool דרך <stdbool.h>) | true או false |
size_t | טיפוס ללא סימן לגדלים ולאינדקסים |
void | ללא טיפוס: משמש לפונקציות ולמצביעים גנריים |
מצייני פורמט של printf ו-scanf
ממלאי מקום שתואמים לטיפוס של כל ארגומנט.
| מציין | מתאים ל |
|---|---|
%d / %i | int עם סימן |
%u | int ללא סימן |
%ld / %lld | long / long long |
%f | double (וגם float ב-printf) |
%.2f | double עם 2 ספרות אחרי הנקודה |
%c | char בודד |
%s | מחרוזת (char *) |
%p | כתובת של מצביע |
%x | int ללא סימן בהקסדצימלי |
%zu | size_t |
אופרטורים
| אופרטור | משמעות |
|---|---|
+ - * / % | אריתמטיקה (% הוא שארית חלוקה של שלמים) |
== != | שווה / לא שווה |
< > <= >= | השוואה |
&& || ! | וגם / או / לא לוגיים |
& | ^ ~ << >> | and, or, xor, not ברמת הביט, והזזות |
++ -- | הגדלה / הקטנה ב-1 |
+= -= *= /= | השמה מורכבת |
cond ? a : b | תנאי טרינרי |
sizeof(x) | גודל של טיפוס או משתנה בבייטים |
בקרת זרימה
| משפט | תחביר |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Else if | else if (x == 0) { ... } |
| Switch | switch (n) { case 1: ...; break; default: ...; } |
| לולאת while | while (i < n) { ... } |
| לולאת do-while | do { ... } while (i < n); |
| לולאת for | for (int i = 0; i < n; i++) { ... } |
| Break / continue | break; יוצא מהלולאה, continue; מדלג לאיטרציה הבאה |
| Goto (נדיר) | goto label; ... label: |
פונקציות
הצהירו לפני השימוש, או הוסיפו אב טיפוס בראש הקובץ.
| פעולה | תחביר |
|---|---|
| הגדרת פונקציה | int add(int a, int b) { return a + b; } |
| אב טיפוס (הצהרה) | int add(int a, int b); |
| ללא ערך החזרה | void greet(void) { ... } |
| ללא פרמטרים | int rand_seed(void) { ... } |
| העברה דרך מצביע (לשינוי) | void inc(int *p) { (*p)++; } |
| העברת מערך | int sum(int arr[], int n) { ... } |
| Static (מקומי לקובץ) | static int helper(void) { ... } |
מצביעים וזיכרון
מצביע מחזיק כתובת. את זיכרון ה-heap צריך לשחרר ידנית.
| פעולה | תחביר |
|---|---|
| הצהרה על מצביע | int *p; |
| לקיחת כתובת | p = &x; |
| גישה דרך מצביע (קריאה/כתיבה) | int y = *p; / *p = 10; |
| מצביע null | int *p = NULL; |
| הקצאה ב-heap | int *a = malloc(n * sizeof(int)); |
| הקצאה + איפוס | int *a = calloc(n, sizeof(int)); |
| שינוי גודל הקצאה | a = realloc(a, newSize); |
| שחרור זיכרון heap | free(a); |
| אריתמטיקה של מצביעים | *(a + i) זהה ל-a[i] |
מערכים ומחרוזות
מחרוזות ב-C הן מערכי char שמסתיימים ב-\0.
| פעולה | תחביר |
|---|---|
| הצהרה על מערך | int nums[5]; |
| אתחול מערך | int nums[] = {1, 2, 3}; |
| גישה לאיבר | nums[0] = 10; |
| אורך מערך (מערכים על ה-stack) | sizeof(nums) / sizeof(nums[0]) |
| מחרוזת ליטרלית | char s[] = "hello"; |
| אורך מחרוזת | strlen(s) (לא כולל \0) |
| העתקת מחרוזת | strcpy(dst, src); |
| השוואת מחרוזות | strcmp(a, b) == 0 פירושו שוות |
| שרשור מחרוזות | strcat(dst, src); |
Structs ופונקציות נפוצות מהספרייה הסטנדרטית
| פעולה | תחביר |
|---|---|
| הגדרת struct | struct Point { int x; int y; }; |
| הצהרה וגישה | struct Point p; p.x = 1; |
| גישה דרך מצביע | p->x = 1; (זהה ל-(*p).x) |
| כינוי לטיפוס | typedef struct Point Point; |
| קריאת קלט | scanf("%d", &n); |
| המרת מחרוזת ל-int | int n = atoi("42"); |
| ערך מוחלט / חזקה | abs(x) (int), pow(x, y) מתוך <math.h> |
| מיון מערך | qsort(arr, n, sizeof(int), cmp); |
התחביר, מצייני הפורמט ודפוסי המצביעים של C שהכי שימושיים, בעמוד אחד. ה-C cheat sheet הזה הוא דף עזר מהיר לכתיבת C: טיפוסי הנתונים, מצייני printf/scanf, אופרטורים, בקרת זרימה, ופעולות המצביעים והזיכרון שמכשילות רבים.
כל מה שכאן הוא C סטנדרטי (C99/C11) ומתקמפל עם gcc או clang. העתיקו את מה שצריך, או נסו כל קטע קוד בזמן אמת בעורך האונליין של C, בלי להתקין קומפיילר. לומדים C? קורס C האינטראקטיבי והחינמי של Coddy מלמד מצביעים, זיכרון והספרייה הסטנדרטית בצורה מעשית.
שאלות נפוצות על ה-C cheat sheet
האם ה-C cheat sheet הזה בחינם?
מה ההבדל בין ה-stack ל-heap ב-C?
malloc או calloc, נשאר קיים עד שקוראים ל-free, ומשמש כשצריך זיכרון שחי יותר מהפונקציה הנוכחית או שגודלו ידוע רק בזמן ריצה. שכחה לקרוא ל-free על זיכרון heap גורמת לדליפת זיכרון.למה scanf צריך אמפרסנד (&) ו-printf לא?
scanf כותב את הערך בחזרה לתוך המשתנה שלכם, ולכן הוא צריך את הכתובת של המשתנה, וזה בדיוק מה ש-&x נותן לו. printf רק קורא את הערך, ולכן מעבירים את הערך עצמו. היוצא מן הכלל הוא מחרוזות: מערך char כבר מתנוון למצביע, ולכן מעבירים scanf("%s", name) בלי ה-&.