تخزين مؤشر لمؤشر ل داخل struct و الوصول إليه

  • hazem94

السلام عليكم,

أحاول إنشاء مؤشر لمؤشر ل int داخل struct و القيام ب Dynamic initialization باستخدام ()calloc أو ()malloc على الشكل التالي:

فكيف أقوم بذلك؟ و كيف أستطيع الوصول إلى قيم seats التي هي في الحقيقة 2-D مصفوفة؟

 struct Hall{
    int **seats;    
}; 


void main(){

 struct Hall *hall;

}

و شكراً جزيلاً ....


يوسف سيد أضف ردا

الأخطاء:

  1. سلوك غير معرف للدالة الرئيسية:

void main(){

  1. خطأ بديهي Hall ليس نوعًا، إنما هو structure إما تُعرفه كنوع باستخدام typedef أو تضيف المفتاح struct قبل تعريف hall، أو ببساطة تعرف في نص إعلان الـstructure لن تحتاج إلى إعلانه كمؤشر في هذه الحالة.

الشيفرة أصلًا بسيطة، وكان يفضل أن تكتبها بنفسك، هذه مجرد أساسيات، يمكنك كتابة شيء مثل:

#include <stdio.h>
#include <stdlib.h>

static struct Hall{
    int **seats;    
} hall; 


int main(void) {
    // مؤشر إلى مؤشر
    hall.seats = malloc(sizeof (int *));
    // المؤشر نفسه
    *hall.seats = malloc(sizeof (int));
    **hall.seats = 412;

    // الوصول إلى قيمة المؤشر
    printf("%d\n", **hall.seats);

    free(*hall.seats);
    free(hall.seats);
    return 0;
}
hazem94 أضف ردا

ماذا عن الوصول إلى القيمة التالية:

seat[i][j]

صحيح؟

يوسف سيد أضف ردا

صحيح هي تتساوى مع -لا فرق في النتيجة النهائية-:

 hall.seats[0][0]

مع ذاك هذا غير منطقي لأنك لديك رقم واحد محجوز، عليك حجز مساحة أكبر من sizeof لـint واحد هذا لـj، وإذا تريد حجز أكثر من مؤشر إلى مؤشر، اِحجز أيضًا عدد مؤشرات أكبر هذا لـi.