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 に答える