أول مرة هنا ؟ تفحص قواعد المشاركة و معلومات أخرى عن عرب overflow!
x

تعريف مصفوفه ثنائية الابعاد بلغة سي

+3 صوت
302 مشاهدات

كيف يمكنني تعريف مصفوفه ثنائية الابعاد من النوع *char وادخال عناصرها في داله ثم إستدعائها في داله اخري وعرض النتائج في دالة main ؟

تقصد ايه بان المصفوفة من نوع ثنائية الابعاد من نوع  char**
اسف كنت اقصد من النوع char * تم التعديل
قصدك انها
2d aray of pointers?

2 إجابة

+3 صوت

 
أفضل إجابة
void show_name (const char *[][2],int);
int main(void)
{
const char *names[3][2] =
{
{"islam", "gamal"} ,
{"ahmed" , "ali"} ,
{"sami" , "sosa"}
};
show_name(names ,3);
return 0;}

void show_name(const char * name [][3],int num)
{
int i =0;

while(i<num)
{
printf("%s %s\n",name[i][0],name[i][1]);
++i;
}
}
+2 صوت

اهم شئ يجب ان تلاحظة هنا هو ان المصفوفة ثنائية الابعاد او اي مصفوفة اخري لا ترسل كقيمة للدالة فهي ترسل فقط كل pointer
و هذا مثال بسيط علي العملية

   void function(int x , int y , char name [][y])
        {
           int i , j;
           for ( i = 0; i < rows; i++ )
           for ( j = 0; j < cols; j++ )
               char[i][j] = some_value();
         }
         void function2(intx , inty ,char name [][y])
         {
          function(x,y,char);
          }     
        void main ()
        {
        char name [10][10];
        function2(10,10,name);
        }

لا يهم كثيرا هنا ما كتب في ال main لكن اهم شئ هو ان تعرف ما معني تعريف المصفوفة ثنائية الابعاد في ال function
فعندما ترسل المصفوفة المعرفة في الmain اتفقنا انها سترسل ك Pointer لهذا فان المصفوفة التي كانت عبارة عن صفوف في اعمدة ستتحول في النهاية الي عنوان واحد و هذا العنوان سيكون علي شكل point of the int of column
بمعني انه اذا كتبت تعريف المصفوفة الثنائية في الدالة function ك int (*name)[y] فسيكون نفس النتيجة لان اسلوب تخزين المصفوفة في ال memory يكون عبارة عن pointer للعمود و عندما تغير الصف يقوم بتغير قيمة العنوان
لهذا فانت ترسل عنوان العمود الاول و بعد هذا تقوم الدالة باستخدام الfor بالتنقل بين العناوين المختلفة حتي تستطيع ان تنشئ مجموعة من الاعمدة
لهذا فكل مرة تقوم بتغيير قيمة ال i في ال for loop في الدالة Function
تغير قيمة العنوان تمام فتنتقل في مكان اخر في الميموري لتقوم بادخال عمود جديد
و اذا اردت ان تستخدم هذه المعلومات مرة اخري في ال main فانه من السهل ان تقوم بانشاء for loop اخري مشابهة حتي تستطيع ان تستخرج المعلومات

مبدأيا اسف علي تأخيري في الرد ثانيا الكود فيه الكثير من الاخطاء البرمجيه ارجو تصحيحها فكل ما اريده هوه الكود وليست الكيفيه والقراءه
لم اهتم كثيرا بكتابة الكود هنا فكنت اكتب الفكرة عاما
اعتقد ان هذا ليس بالمكان الصحيح الذي يطلب فيه الكود فيكتبة لك اخر حتي تقوم بنسخة
Araboverflow أهلا بكم فى عرب Overflow
المجتمع العربى للأسئلة و الأجوبة التقنية.

أحدث الشارات

100 نقطة
- AHMED002177 -
سؤال ذائع الصيت
- أسماء -
100 نقطة
- MuhGhunaim -
سؤال ذائع الصيت
- Mohamed Slama -
100 نقطة
- عرفة غلمش -
...