[英]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.