0

Cに構造体がある場合

typedef struct _a {
    int aval;
} a;

a a_inst;

void main() {
    a_inst.aval = 5;
}

この例では、a_inst.aval と入力せずに「aval」にアクセスするにはどうすればよいですか?? これは可能ですか?

4

5 に答える 5

1

a_inst.avalaval「構造の一部」を指しa_instます。

aval- あなたが入力したいように - " aval...?" を参照すると、コンパイラは不機嫌になり、協力を拒否します。

質問への回答: いいえ。

(もちろん、簡略表記の手段として // ポインターを使用し始めた場合を除きます#define。その時点で、コードが読みにくくなるtypedefという危険な海域に入る可能性があります。)

于 2013-01-17T14:02:53.930 に答える
1

ポインターとは別に、#defineまたはポインターを使用することはできません。だからあなたはできる

#define AVAL a_inst.aval

また

int * pAval= a_inst.aval

しかし、経験豊富なプログラマーはこれを行いません。

于 2013-01-17T14:03:13.827 に答える
0

構造体は 1 つだけで構成されているため、次のint方法で aval を設定できます。

*((int *) &a_inst) = 5;
printf("AVAL %d\n", a_inst.aval);

結果:

AVAL 5

しかし、この種の構造アクセスは使用しないことをお勧めします

于 2013-01-17T15:25:50.717 に答える
0

これを単純でわかりやすい例として提示するだけです。

私はあなたがこれをやりたいと思っていると仮定しています:

typedef struct _a {
    int aval;
} a;

a a_inst;

void main() {
    aval = 5; // <-- Access aval without typing a_inst.aval
}

しかし、それは合理的な方法では不可能です。

なんで?

あなたが持っている場合はどうなりますか:

typedef struct _a {
    int aval;
} a;

a a_inst;
a b_inst;  // Another instance of the a struct

void main() {
    aval = 5; // <-- How would the compiler know if aval refers to aval in a_inst or in b_inst?
}
于 2013-01-17T15:40:58.033 に答える
0

考えられる 1 つの方法は、この構造体フィールドでポインターを使用することです。しかし、あなたは必要になります

void main() {
  int *p_aval = &a_inst.aval;
  *p_aval=...; //access
}

個人的には、構造名を入力することを好みます。明示的であり、害がなく (入力する文字数が少ないなど)、バグが発生しにくいです。

于 2013-01-17T14:03:14.653 に答える