[英]Declaring inner structure variable in nested structure without referring outer structure
[英]how to access a variable without referring to its structure's instance in C?
如果我在C中有一个结构
typedef struct _a {
int aval;
} a;
a a_inst;
void main() {
a_inst.aval = 5;
}
在此示例中,如何不必键入a_inst.aval即可访问“ aval”? 这可能吗 ?
a_inst.aval
指“结构a_inst
的aval
部分”。
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?
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.