2016-04-22 67 views
5

我正在通過學​​習C艱難的方法,並努力理解練習16中的某些內容:構造和指向它們。爲什麼C結構定義中有嵌套的指針?

struct Person *Person_create(char *name, int age, int height, int weight) 
{ 
    struct Person *who = malloc(sizeof(struct Person)); 
    assert(who != NULL); 

    who->name = strdup(name); 
    who->age = age; 
    who->height = height; 
    who->weight = weight; 

    return who; 
} 

我明白,結構人員返回一個指針(* person_create)的結構的開始。但是爲什麼Person中立即嵌套第二個結構定義?指向*誰?

有人可以爲我闡明這一點。或指向我往的結構定義在C

+1

我們錯過了(但可以猜到)struct Person的定義 –

+1

沒有。 'Person_create'函數返回一個指向'Person'的指針。 'who'變量保存函數返回的值。您分配內存,並保存內存位置的副本。然後在最終返回分配內存的位置之前設置此結構的各個字段,在這種情況下,這是「Person」的開始。 (你可以繼續使用它們):) - 指針與書中的頁碼有一個粗略的類比 - 它們告訴你在哪裏可以找到某些東西,還可以告訴(通過指針的類型)哪裏會有什麼。 – enhzflep

回答

5

我明白struct Person返回一個指向一個更好的解釋(*person_create

等待,這不是你的想法,或至少你不這樣說...

這裏,person_create()功能,它返回指向struct Person的指針。這是而不是struct Person的定義。

現在,說,爲您的實際quetion,struct Person *who定義struct Person,相反,它定義了一個變量who這是一個指向struct Person

爲便於理解,請考慮int someRandomVariable = 0。它沒有定義int,對吧?它定義了int類型的變量someRandomVariable

+0

是的。在這種情況下使用「我明白」一詞有點樂觀。我真的不知道發生了什麼事。 –

+0

謝謝btw。這是幫助。會寫一些評論,花一些時間思考。 –

1

該函數返回類型爲struct Person *的指針,換句話說,指向struct Person的指針。

特別是在這裏,您將返回的指針名爲who,正如您可以從聲明struct Person * who = ...中瞭解的那樣。因此,您需要爲將填充的變量who分配內存,並返回指向的內存。