Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

ورقة C المرجعية

آخر تحديث

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 / %iint بإشارة
%uint بلا إشارة
%ld / %lldlong / long long
%fdoublefloat في printf)
%.2fdouble بمنزلتين عشريتين
%cchar واحد
%sسلسلة نصية (char *)
%pعنوان مؤشر
%xint بلا إشارة بالنظام الست عشري
%zusize_t

العوامل

العاملالمعنى
+ - * / %حسابي (% هو باقي القسمة الصحيحة)
== !=يساوي / لا يساوي
< > <= >=المقارنة
&& || !منطقي: و / أو / نفي
& | ^ ~ << >>ثنائي: and و or و xor و not والإزاحات
++ --الزيادة / النقصان
+= -= *= /=إسناد مركّب
cond ? a : bشرطي ثلاثي
sizeof(x)حجم نوع أو متغير بالبايت

التحكم في التدفق

العبارةالصياغة
If / elseif (x > 0) { ... } else { ... }
Else ifelse if (x == 0) { ... }
Switchswitch (n) { case 1: ...; break; default: ...; }
حلقة whilewhile (i < n) { ... }
حلقة do-whiledo { ... } while (i < n);
حلقة forfor (int i = 0; i < n; i++) { ... }
Break / continuebreak; تخرج من حلقة، و continue; تتخطّى إلى التكرار التالي
Goto (نادر)goto label; ... label:

الدوال

عرّفها قبل الاستخدام، أو أضِف نموذجًا أوليًا (prototype) في أعلى الملف.

العمليةالصياغة
تعريف دالة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 int helper(void) { ... }

المؤشرات والذاكرة

المؤشر يحمل عنوانًا. ويجب تحرير ذاكرة الكومة (heap) يدويًا.

العمليةالصياغة
تعريف مؤشرint *p;
عنوان-كذا (address-of)p = &x;
التفكيك (قراءة/كتابة)int y = *p; / *p = 10;
مؤشر فارغ (null)int *p = NULL;
التخصيص على الكومةint *a = malloc(n * sizeof(int));
التخصيص + التصفيرint *a = calloc(n, sizeof(int));
تغيير حجم التخصيصa = realloc(a, newSize);
تحرير ذاكرة الكومةfree(a);
حساب المؤشرات*(a + i) مثل a[i] تمامًا

المصفوفات والسلاسل النصية

السلاسل النصية في C هي مصفوفات char تنتهي بـ \0.

العمليةالصياغة
تعريف مصفوفةint nums[5];
تهيئة مصفوفةint nums[] = {1, 2, 3};
الوصول إلى عنصرnums[0] = 10;
طول المصفوفة (مصفوفات المكدّس)sizeof(nums) / sizeof(nums[0])
سلسلة نصية حرفيةchar s[] = "hello";
طول السلسلة النصيةstrlen(s) (لا يشمل \0)
نسخ سلسلة نصيةstrcpy(dst, src);
مقارنة السلاسل النصيةstrcmp(a, b) == 0 يعني متساويتان
دمج السلاسل النصيةstrcat(dst, src);

البُنى والمكتبة القياسية الشائعة

العمليةالصياغة
تعريف بنية (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);
تحويل سلسلة نصية إلى intint n = atoi("42");
القيمة المطلقة / الأسabs(x) (int)، و pow(x, y) من <math.h>
ترتيب مصفوفةqsort(arr, n, sizeof(int), cmp);

صياغة C ومحدّدات التنسيق وأنماط المؤشرات التي تستخدمها أكثر من غيرها، على صفحة واحدة. ورقة C المرجعية هذه هي مرجع سريع لكتابة C - أنواع البيانات، ومحدّدات printf/scanf، والعوامل، والتحكم في التدفق، وعمليات المؤشرات والذاكرة التي تربك الكثيرين.

كل ما هنا هو C قياسية (C99/C11) ويُترجم بـ gcc أو clang. انسخ ما تحتاجه، أو جرّب أيّ مقطع برمجي مباشرة في playground الخاص بـ C - دون الحاجة إلى تثبيت أي مترجم.

الأسئلة الشائعة حول ورقة C المرجعية

هل ورقة C المرجعية هذه مجانية؟
نعم. ورقة C المرجعية هذه مجانية تمامًا، دون الحاجة إلى التسجيل. أضِفها إلى المفضلة وارجع إليها متى احتجت إلى البحث عن نوع أو محدّد تنسيق أو عملية مؤشر.
ما الفرق بين المكدّس (stack) والكومة (heap) في C؟
تحمل ذاكرة المكدّس المتغيرات المحلية وتُحرَّر تلقائيًا عند عودة الدالة - سريعة، لكنها محدودة الحجم. أمّا ذاكرة الكومة فتُخصَّص صراحةً بـ malloc أو calloc، وتبقى حتى تستدعي free، وتُستخدم عندما تحتاج إلى ذاكرة تعيش أطول من الدالة الحالية أو يُعرف حجمها وقت التشغيل فقط. ونسيان free لذاكرة الكومة يسبّب تسرّب ذاكرة.
لماذا تحتاج scanf إلى علامة العطف (&) بينما لا تحتاجها printf؟
تكتب scanf القيمة في متغيرك، لذا تحتاج إلى عنوان المتغير - وهذا ما يمنحها إياه &x. أمّا printf فتقرأ القيمة فقط، لذا تمرّر القيمة نفسها. والاستثناء هو السلاسل النصية: مصفوفة char تتحلّل بالفعل إلى مؤشر، لذا تمرّر scanf("%s", name) دون &.
هل يمكنني التدرّب على C عبر الإنترنت؟
نعم. افتح playground الخاص بـ C لترجمة وتشغيل أيّ مقطع برمجي من هذه الورقة المرجعية في متصفحك - دون الحاجة إلى تثبيت أي مترجم. وعندما ترغب في تعلّم منظّم، تأخذك دورة C التفاعلية المجانية من Coddy من المتغيرات والحلقات إلى المؤشرات وإدارة الذاكرة خطوة بخطوة.
هل هذه الورقة المرجعية مناسبة للمبتدئين؟
نعم. إنها مرتّبة من اللبنات الأكثر شيوعًا (الأنواع و printf والتحكم في التدفق) وصولًا إلى المتقدمة (المؤشرات والذاكرة والبُنى)، بحيث يمكنك استخدام الأقسام العلوية من اليوم الأول والتدرّج إلى البقية.
Coddy programming languages illustration

تعلّم C مع Coddy

ابدأ الآن