0

如果我在 C 中有一个结构

typedef struct _a {
    int aval;
} a;

a a_inst;

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

我怎样才能访问“aval”而不必在这个例子中输入 a_inst.aval ?这可能吗 ?

4

5 回答 5

1

a_inst.aval指“aval结构的一部分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

一种可能的方法是在此结构字段上使用指针。但是你需要

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

我个人更喜欢输入结构名称。它是明确的,不会造成伤害(就像要输入更多的字符)并且不太容易出现错误。

于 2013-01-17T14:03:14.653 回答
0

由于结构仅由一个结构组成,因此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 回答