嗨朋友我是结构新手。我试图获得结构中存在的元素的路径。 例如:
如果我有: -
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个这样的整数,则会出现这种情况。)
答案 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, ... };