如果我在 C 中有一个结构
typedef struct _a {
int aval;
} a;
a a_inst;
void main() {
a_inst.aval = 5;
}
我怎样才能访问“aval”而不必在这个例子中输入 a_inst.aval ?这可能吗 ?
a_inst.aval
指“aval
结构的一部分a_inst
”。
aval
- 你想输入 - 会引用“ aval
...?”,此时编译器会变得脾气暴躁并拒绝合作。
回答你的问题:没有。
(当然,除非您开始使用#define
/ typedef
/ 指针作为速记符号的一种手段,此时您正在进入使代码可读性降低的危险水域。)
除了#define
或使用指针,没有。所以你可以做
#define AVAL a_inst.aval
或者
int * pAval= a_inst.aval
但有经验的程序员不会这样做。
一种可能的方法是在此结构字段上使用指针。但是你需要
void main() {
int *p_aval = &a_inst.aval;
*p_aval=...; //access
}
我个人更喜欢输入结构名称。它是明确的,不会造成伤害(就像要输入更多的字符)并且不太容易出现错误。
由于结构仅由一个结构组成,因此int
您可以通过以下方式设置 aval:
*((int *) &a_inst) = 5;
printf("AVAL %d\n", a_inst.aval);
结果:
AVAL 5
但我建议不要使用这种结构访问
只是将其作为一个简单易懂的示例来呈现。
我假设您希望能够做到这一点:
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?
}