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 *p_alphabet = &abc;

个别元素的路径就像

abc.def.lmn.a1;

abc.def.pqr.b1;

如果我有一个指针 p_alphabet,有什么方法可以获取每个元素的确切路径,并且可以将它们存储在一个数组中,这样我就不需要编写它们中的每一个(以防万一我们在这些结构中定义了 1000 个这样的整数)。

4

2 回答 2

1

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

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

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

不存在。您可以做的是使结构本身保存数组。然后通过表示变量名称的常量索引数组。这样做的限制是所有类型都应该相同(或者说兼容)。例如:

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.

于 2013-06-03T14:29:22.500 回答
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, ... };
于 2013-06-03T14:47:06.807 回答