في البرمجة C ، ما هو الفرق بين اسم دالة ومتغير؟


الاجابه 1:

اسم الوظيفة هو اسم تقوم بتعيينه لوظيفة تقوم بإنشائها ، والتي يمكن أن تشغل 1 إلى العديد من أسطر التعليمات البرمجية. يمكن أن تتلقى دالة 0 إلى العديد من المعلمات. لكن إرجاع واحد فقط.

يُسمى المتغير بشكل أساسي مساحة الذاكرة المخصصة لتلقي المعلومات وتخزينها ، والتي يمكن أيضًا تمريرها كمعلمة إلى دالة. عادةً ما تتجاهل المتغيرات لتكون نوعًا معينًا: عدد صحيح ، سلسلة ، حرف ، إلخ.


الاجابه 2:
في البرمجة C ، ما هو الفرق بين اسم دالة ومتغير؟

إنهما شيئان مختلفان تمامًا.

اسم الوظيفة (لا حاجة إلى تسطير أسفل السطر ، إنها مجرد عبارة) هو اسم الوظيفة ، يتم تحديدها عند الإعلان عن الوظيفة أو تعريفها.

المتغير - حسنًا ، ليس واضحًا بنسبة 100٪ ما هو "المتغير" في C. المعيار C لا يستخدم كلمة "المتغير" بالمعنى المعتاد. يعرّف C الكائن المصطلح بأنه "منطقة تخزين البيانات في بيئة التنفيذ ، والتي يمكن أن تمثل محتوياتها القيم". يمكن تسمية الكائن المعلن باسم "المتغير" بشكل معقول ، ولكن لا يوجد توافق في الآراء بشأن ما هو "المتغير" بالضبط أو لا.

يمكن استدعاء وظيفة. كائن يمكن أن تعقد القيم.


الاجابه 3:

الفرق الرئيسي هو أن الوظيفة المرتبطة باسم الوظيفة يتم إعدادها تلقائيًا بواسطة المترجم. في C ، ليست الوظائف "كائنات من الدرجة الأولى" - لا يمكنك نقلها إلى وظائف ستعدلها / تجمعها وتعيدها بالطريقة التي يمكنك استخدامها مع أرقام أو سلاسل من الأحرف).

تحتفظ المتغيرات بقيم كائنات من الدرجة الأولى (أعداد صحيحة وشخصيات وأرقام طافية وما إلى ذلك. يمكن أن يكون لديك مؤشر إلى وظيفة وهذا هو كائن من الدرجة الأولى يمكنك تخزينه وتمريره / إرجاعه من الوظائف (واستخدامه للاتصال بـ وظيفة) ، ولكن لا يمكنك تغيير "قيمة" الوظيفة نفسها في وقت التشغيل ، كما يمكنك مع كائنات من الدرجة الأولى ..

لذلك تبدو متشابهة إلى حد كبير مثل المتغيرات ولكن الشيء الوحيد الذي يمكنك القيام به معهم ، بخلاف أخذ عنوانهم ، هو الاتصال بهم. لا يمكنك قول main = {something…} ، يجب عليك فقط تحديد الوظيفة الرئيسية والسماح للمترجم بعمل ارتباط للاسم والرمز وراء الكواليس.

تسمى لغات مثل Haskell ، حيث يمكنك تحديد قيمة الوظائف في وقت التشغيل ، اللغات "الوظيفية" لهذا السبب. مثال بسيط هو وظيفة تُدعى make adder adder ، تقوم بتمرير معدل الضريبة عليها وتعيد دالة ستضيف معدل ضريبة ثابت على العناصر التي تم تمريرها إليها:

addstatetax = maketaxadder (.05)

addlocaltax = maketaxadder (.015)

هنا أنشأنا وظيفتين في وقت التشغيل يمكن تسميتهما ، على سبيل المثال سيعود addstatetax (100) 105 بينما سيعود addlocaltax (100) 101.50.

يحتوي addstatetax المتغير على "قيمة" للدالة التي تأخذ رقمًا وتُرجع أخرى مع إضافة 5٪. يمكنك القيام بأشياء متشابهة في C مع البنيات ومؤشرات الوظائف ، لكن الأمر أصعب كثيرًا (تحديد أنواع مؤشر الدالة في C صعب للغاية) وأكثر عرضة للخطأ.


الاجابه 4:

اسم الوظيفة هو في الأساس مؤشر ، وبالتالي يمكنك القيام بشيء مثل: void (* func) (int)؛ func = myVoidFunc؛ // أو alternativelyfunc = & myVoidFunc؛

وهذا هو حقا الفرق الرئيسي. عند العمل مع المؤشر بشكل طبيعي ، من المهم جدًا استخدام عامل التشغيل (علامة العطف) أم لا ، مثل:

int * ptr = myVar؛ // andint * ptr = & myVar؛

من المؤكد أنه سيؤدي إلى سلوك مختلف تمامًا ، ولكن بخلاف ذلك ، فإن أسماء الوظائف هي مجرد مؤشرات ، على الأقل هذا ما أراه. أنا متأكد من الخوض في التفاصيل ، فليس لدي أي معنى على الإطلاق ، ولكن من وجهة نظرك ، ومن أنا ، أنا متأكد من أنها ستفعل ذلك.

الاختلاف الآخر هو بالطبع أنه لا يمكنك تحديد اسم وظيفة ، ولا يمكنك القيام بحساب المؤشر عليه ، أو على الأقل إذا كنت تستطيع أن تكون خطرة للغاية ، وهكذا دواليك.