簡體   English   中英

如何在不引用C語言結構實例的情況下訪問變量?

[英]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_instaval部分”。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM