2013-08-20 118 views
-4

我是C新手,這可能是一個初級問題。什麼是C中的struct?

在閱讀了C源文件,我發現這一點:

struct globalArgs_t { 
    int noIndex; 
    char *langCode; 
    const char *outFileName; 
    FILE *outFile; 
    int verbosity; 
    char **inputFiles; 
    int numInputFiles; 
} globalArgs; 

對於我來說,globalArgs_t似乎是一個函數,它肯定不是。這個對象是什麼?爲什麼他們使用?我如何使用它?

我在找實例,我有一個Python背景。

+2

這可以很容易地用Google搜索... http://en.wikipedia.org/wiki/Struct_%28C_programming_language%29 – Kippie

+2

http://en.wikipedia.org/wiki/Struct_(C_programming_language) – Nargis

+2

對於每個人都有着苛刻的要求......確保它可以很容易地被Google搜索到,但對於初學者來說這是一個很好的問題。 – NWS

回答

2

這種說法做了兩兩件事:

  • 它聲明的新型struct globalArgs_t含7場
  • 它聲明struct globalArgs_t類型的新變量globalArgs的結構。其字段可以用.運營商,例如訪問:globalArgs.verbosity = 2;
+0

這是什麼用法? –

+0

它在數組中特別有用。想象一下,你必須用他們的(x,y)座標表示一個點列表。如果沒有結構,你會被迫使用兩個int數組並且總是一起管理它們;感謝結構,你可以使用一個結構數組struct'{int x,y; }'。 – Medinoc

1

這是一種方式來定義相對於使用的名稱在內存中的指針發生偏移。

如果您globalArgs_t分配足夠的內存,那麼noIndex將在該存儲區中的偏移量爲0,langCode達到偏移4(的noIndexnoIndex尺寸偏差)。

這樣,您可以輕鬆訪問保存在內存中的不同值,而無需記住確切的偏移量。它還會使代碼更具可讀性,因爲您可以爲每個偏移量指定一個有用的名稱,並且在編寫值時C編譯器可以執行一些類型檢查。

1

A struct就像一個元組。您可以將其視爲包含其他變量的變量。

struct globalArgs_t { 
    int noIndex; 
    char *langCode; 
    const char *outFileName; 
    FILE *outFile; 
    int verbosity; 
    char **inputFiles; 
    int numInputFiles; 
} globalArgs; 

// this function takes a pointer to a globalArgs_t struct 
void myFunction(struct globalArgs_t *myStruct) 
{ 
    // we're using the operator '->' to access to the elements 
    // of a struct, which is referenced by a pointer. 
    printf("%i\n", myStruct->noIndex); 
} 

int main() 
{ 
    // We're using the operator '.' to access to the element of the structure 
    globalArgs.noIndex = 5; 
    myFunction(&globalArgs); // A structure is a variable, so it has an address 
    return 0; 
} 
相關問題