الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اختبر قدراتك في C/CPP - الحلقة الثانية, الجزء الرابع

مغلق
بدأه Snack3r في 6 سبتمبر 2012 · 4 رد · 662 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الحلقة الأولى.

الحلقة الثانية - الجزء الأول.

الحلقة الثانية - الجزء الثاني.

الحلقة الثانية - الجزء الثالث.

مرحبا بكم في الجزء الرابع من الحلقة الثانية من سلسلة اختبر قدراتك, قمتُ بتقسيم الحلقة الثانية إلى عدة أجزاء, مُرتبة حسب الصعوبة.

الحلقة الثانية خاصة بالمؤشرات.

الإختبار الثاني (الجزء الرابع ) :

ما هي الأنواع التي تقابل الكتابات التالية :

int *t[5][];
int (*t)[5][];
int (*f)(int, int *t[][5]);
int (*(*f)(int, void *))[5];
int (*(*)(int, void *))[5];

سأضع حل السؤال بعد إنتهاء عرض المحاولات.

3
#2

ما هذه التصريحات يا أحمد, لم أستعملها و لن أستعملها ما حييت :wacko:

int *t[5][];

إذا لم يكن التصريح خاطئ, فمصفوفة مؤشرات ثنائية البعد ب 5 أعمدة

int (*t)[5][];

نفس الشيء

int (*f)(int, int *t[][5]);

مؤشر دالة تعيد عدد صحيح و تأخذ وسائط: عدد صحيح و جدول مصفوفات أحادية البعد كل مصفوفة بخمسة مؤشرات int

int (*(*f)(int, void *))[5];

مصفوفة بخمس مؤشرات لدالة تعيد int و تأخذ وسائط: عدد صحيح + مؤشر void

int (*(*)(int, void *))[5];

أظنه خطأ, إذا كان ذلك التصريح صحيح, فيعني أن هذا صحيح

int (*(*)())[5]

و هو تصريح غريب جدا

[سبحان الله و بحمده, سبحان الله العظيم]

#3

فلنبدأ على بركة الله أخي أحمد

int *t[5][];

عبارة خاطئة لأننا لم نحدد حجم أعمدة المصفوفة

اقتباس
|error: array type has incomplete element type|

العبارة الصحيحة أن نكتب هكذا مثلا smile.gif

int *t[][5]

ولكن لا ننسى أن نعطى المؤشرات قيما في البداية حتى يتعرف على عدد أسطر المصفوفة

كمثال

#include <stdio.h>

int main()
{

int a[5]={5,10,15,20,25};
int *t[][5]={[1]={&a[0],&a[1],&a[2],&a[3],&a[4]}}; // المجموع 10 مؤشرات
printf("%d",*t[1][4]); 

return 0;
}

int *t[][5]

=> مصفوفة ثنائية البعد لمؤشرات كل بعد يتكون من 5 أعمدة من نوع int

int (*t)[5][];

نفس الخطأ الأول يتكرر بالنسبة لهذه المصفوفة

=> مؤشر لمصفوفة ثنائية البعد كل بعد يتكون من 5 أعمدة من نوع int

int (*f)(int, int *t[][5]);

=> مؤشر لدالة من نوع int تستقبل كوسائط int و مصفوفة ثنائية البعد لمؤشرات كل بعد يتكون من 5 أعمدة من نوع int

int (*(*f)(int, void *))[5];

=> مؤشر لجدول يتكون من 5 مؤشرات لدوال من نوع int تستقبل كوسائط int و مؤشر من نوع void أو (مؤشر عام)

int (*(*)(int, void *))[5];

=> نفس الحالة لكن هناك خطأ في التصريح لأننا لم نسمي مؤشر الدالة

أتمنى أن تكون إجاباتي صحيحةhappy.gif

وبالتوفيق للجميع

تم تعديل هذه المشاركة بواسطة مومو (momo) في 6 سبتمبر 2012 في 16:15

2

i love you mama

#4

لا أزيد على ما قاله الأخ momo, فعلا إجاباتك صحيحة 100%.

+1

بارك الله فبك.

1
#5

تم منح النقاط للمشاركات المفيدة و حذف الردود الغير مفيدة, حفاظا على تنسيق الموضوع.

يُغلق.

أراكم في الجزء الخامس من الحلقة الثانية.

هذا الموضوع مغلق.

مواضيع مشابهة