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 הזה בחינם?
כן. ה-C cheat sheet הזה חינמי לגמרי, בלי צורך בהרשמה. שמרו אותו במועדפים וחזרו אליו בכל פעם שצריך לבדוק טיפוס, מציין פורמט או פעולת מצביע.
מה ההבדל בין ה-stack ל-heap ב-C?
malloc או calloc, נשאר קיים עד שקוראים ל-free, ומשמש כשצריך זיכרון שחי יותר מהפונקציה הנוכחית או שגודלו ידוע רק בזמן ריצה. שכחה לקרוא ל-free על זיכרון heap גורמת לדליפת זיכרון.למה scanf צריך אמפרסנד (&) ו-printf לא?
scanf כותב את הערך בחזרה לתוך המשתנה שלכם, ולכן הוא צריך את הכתובת של המשתנה, וזה בדיוק מה ש-&x נותן לו. printf רק קורא את הערך, ולכן מעבירים את הערך עצמו. היוצא מן הכלל הוא מחרוזות: מערך char כבר מתנוון למצביע, ולכן מעבירים scanf("%s", name) בלי ה-&.אפשר לתרגל C אונליין?
כן. פתחו את עורך האונליין של C כדי לקמפל ולהריץ כל קטע קוד מדף העזר הזה בדפדפן, בלי להתקין קומפיילר. כשתרצו מסגרת מסודרת, קורס C האינטראקטיבי והחינמי של Coddy לוקח אתכם צעד אחר צעד ממשתנים ולולאות ועד מצביעים וניהול זיכרון.
האם דף העזר הזה מתאים למתחילים?
כן. הוא מסודר מאבני הבניין הנפוצות ביותר (טיפוסים, printf, בקרת זרימה) ועד המתקדמות (מצביעים, זיכרון, structs), כך שאפשר להשתמש בחלקים העליונים כבר מהיום הראשון ולהתקדם לשאר בהמשך.