c شرح كيف يمكنني تهيئة مجموعة من المؤشرات للهيكل؟




struct in c شرح (2)

هل من الممكن تهيئة مجموعة من المؤشرات للهيكل؟ شيء مثل:

struct country_t *countries[] = {
        {"United States of America", "America"},
        {"England", "Europe"},
        {"Ethiopia", "Africa"}  
    }

أريد أن أفعل ذلك من أجل الحصول على الكيانات في الذاكرة غير المتجاورة، والمؤشرات لهم في الذاكرة المتجاورة ... ولكن لا أستطيع استخدام الذاكرة الديناميكية، لذلك أتساءل عما إذا كان من الممكن دون ذلك.


حسنا، التعليمات البرمجية الخاصة بك يستخدم الهياكل بدلا من المؤشرات إلى الهياكل. هناك طرق للقيام بما تسعى إليه، بما في ذلك:

static struct country_t us = { "United States of America", "America" };
static struct country_t uk = { "England",                  "Europe"  };
static struct country_t et = { "Ethiopia",                 "Africa"  };

struct country_t *countries[] = { &us, &uk, &et, };

هناك طرق أخرى للقيام بذلك مع إنيتيليزرز المعينة والحروف المركبة في C99. القسم 6.5.2.5 "مجمع الحرفية" يظهر الطريق:

struct country_t *countries[] =
{
    &(struct country_t) { "United States of America", "America" },
    &(struct country_t) { "England",                  "Europe"  },
    &(struct country_t) { "Ethiopia",                 "Africa"  },
};

يوضح المعيار مؤشرات إلى الهياكل مع استدعاء دالة. كن على علم بأن ليس كل المجمعين C تقبل بناء الجملة C99، وهذه الحرفية المركزة لم تكن موجودة في C89 (ويعرف أيضا باسم C90).

تعديل: تمت ترقيتها لاستخدام رموز البلدان المكونة من حرفين إسو 3166. كما جعلت الهياكل اسمه إلى متغيرات ثابتة - تلك الرموز لم تكن مرئية خارج الملف قبل (لأنها لم تكن موجودة)، والآن أنها ليست مرئية خارج الملف بعد، إما. لقد ناقشت ما إذا كنت تريد أن تجعل أي شيء ثبوت وقررت عدم - ولكن باستخدام كونست عندما يمكنك عموما فكرة جيدة. أيضا، في المثال، هناك 3 بلدان في 3 قارات. هل كان لديك العديد من البلدان في قارة واحدة (القاعدة)، قد ترغب في أن تكون قادرة على مشاركة سلاسل القارة. ومع ذلك، فإن ما إذا كنت تستطيع أن تفعل ذلك بأمان) أو على struct country_t (يعتمد على تفاصيل البلد struct country_t ) التي لم تعط (، وما إذا كان يسمح للبرنامج بتحديث اجلدول) الذي يعود إلى السؤال الذي يطرح نفسه (، .


هذا يعمل بالنسبة لي:


struct country_t {
    char *fullname;
    char *shortname;
};

struct country_t countries[] = {
        {"United States of America", "America"},
        {"England", "Europe"},
        {"Ethiopia", "Africa"}
};

int main(int argc, char *argv[])
{
    return 0;
}

هل يمكن أن تكون أكثر تحديا واستخدام:


struct country_t {
    char *fullname;
    char *shortname;
} countries[] = {
        {"United States of America", "America"},
        {"England", "Europe"},
        {"Ethiopia", "Africa"}
};

int main(int argc, char *argv[])
{
    return 0;
}

تحرير: وجدت هذه المعلومات في كتاب C





struct