C中元素的结构路径

时间:2013-06-03 14:12:47

标签: c structure

嗨朋友我是结构新手。我试图获得结构中存在的元素的路径。 例如:

如果我有: -


struct abc
{
    struct def
    {
        struct lmn
        {
            int a1;
            int a2;
            int a3;
        }lmn;

        struct pqr
        {
            int b1;
            int b2;
            int b3;
        }pqr;

    }def;

}abc;

int *p_alphabet = &abc;

单个元素的路径就像

abc.def.lmn.a1;

abc.def.pqr.b1;

如果我有一个指针p_alphabet,有什么方法可以得到每个元素的确切路径,我可以将它们存储在一个数组中,这样我就不需要编写它们中的每一个(只是在如果我们在这些结构中定义了1000个这样的整数,则会出现这种情况。)

2 个答案:

答案 0 :(得分:1)

C中没有标准的方法来迭代结构的不同成员。所以像这样:

struct X {
    int a1;
    int a2;
    int a3;
} x;

int *x_members[3];
for (m in x)
    x_members[m_index] = &m;

不存在。你可以做的是让struct自己保持数组。然后用表示变量名称的常量索引数组。对此的限制是所有类型都应该相同(或者说相容)。例如:

enum X_members {
    X_A1,
    X_A2,
    X_A3
};

struct X {
    int members[3];
} x;

然后你可以:

int *x_members[3];
for (i = 0; i < 3; ++i)
    x_members[i] = &x.members[i];

或直接使用这样的结构:

int xa1 = x.members[X_A1];

嵌套结构可能意味着嵌套数组,或者使用适当的枚举名称(例如X_STR1_STR2_A5)索引的一个数组。

答案 1 :(得分:0)

我要做的是查找数组。

struct abc
{
    struct def
    {
        struct lmn
        {
            int a1;
            int a2;
            int a3;
        }lmn;
        struct pqr
        {
            int b1;
            int b2;
            int b3;
        }pqr;
    }def;
}abc;

int* lookupArray[] = { &abc.lmn.a1, ... };