--------------------------------------------------------------------------------
السلام عليكم ورحمة الله وبركاته
أولا لتعلم لغة السي يجب أن تعلمي أن لفظ سي يطلق أحيانا ويقصد به العموم أي لغتي السي والسي بلاس بلاس
ثانيا سأفترض أنك تريدين لغة السي
وقبل أن أشرع في الاجابة على الأسئلة أريد أن أعلق على اجابة الأخ الفاضل \"محب الرسول\" حيث أنه استخدم كلمة public في الأكواد التي كتبها وأعتقد أن هذه الكلمة معرفة في لغة سي بلاس بلاس فقط وليس لها أي معنى في السي
ثالثا void
نظرة عامة على طريقة كتابة الدالة في لغة السي
كود:
return_type fn_name (comma separated arguments if any );for example the one that you already have written
كود:
void code (char*input,char*output,char start);معنى هذا السطر أن الدالة التي اسمها code والتي تأخذ البارامترات input, output, start لن ترجع أي قيمة وإذا كتبنا كلمة int بدلا من void فإن ذلك يعني أن الدالة سترجع قيمة صحيحة وهكذا
ملحوظة
إذا لم تفهمي الشرح الموضح أو توقفت أمامك بعض المصطلحات مثل return_type أو arguments فأنت بحاجة لقراءة أساسيات السي أولا ومن رأيي أن تؤجلي البحث عن موضوع الدوال حتى تتقني العمليات الأساسية أولا مثل برامج المقارنة واخراج أكبر وأصغر عدد وهكذا وأيضا يجب أن تؤجلي التعامل مع ال pointers حتى تتقني مبادئ اللغة أولا
رابعا pointers
لقد قلتي في كلامك بالنص الآتي عندما كنت تتحدثين عن argv
\"هل هو مجرد سطر لتعريف المصفوفة والمؤشر الخاص بها\"
وهذا الكلام غير دقيق
أختي يجب أن تعلمي أن لغة السي ييعامل مع المتغيرات من نوع char* بطريقة مختلفة عن أي نوع آخر مثل int* او void*
بمعنى أن int* معناه أن هناك pointer يستطيع التعامل مع بيانات من نوع int وأيضا void* معناه أن هناك pointer يستطيع التعامل مع أي نوع من المتغيرات حيث إن void لا تحدد نوعا كما وضحنا
لكن الأمر يختلف مع char فبالرغم من أن char متغير يحمل حرفا واحدا فإن من الطبيعي أن يكون char* هو pointer يستطيع النعامل مع بيانات من نوع char أي حرف واحد من البيانات ولكن الأمر يختلف تماما حيث إن char* معناه أن البرنامج سيقوم بتكوين متسلسلة من الحروف string فبدلا من أن يحمل char* حرفا واحدا فإنه يمكن أن يحمل اسما كاملا وبالتالي فإن
كود:
char * argv[]معناه أننا عندنا مصفوفة كل خلية منها تستطيع أن تحمل اسما كاملا بدلا من حرف واحد
وكما سبق ونوهت فإن char* تعني متسلسلة حروف أي مصفوفة حروف لذلك فإنه عند التعامل مع char يجب ملاحظة أن علامة الpointer * تعطي نفس معني الكصفوفة [] لذلك فلا عجب ان وجدت أن الكود مكتوب بهذه الصورة
كود:
char ** argvهو هو نفسه
كود:
char * argv[]وعموما في المرحلة المبتدئة لا يلزم اطلاقا التعامل مع argc or argv لكن يجب فهم كيفية تعامل ال pointer مع البيانات من نوع char