簡體   English   中英

為什么我們在C中為鏈表定義Structure時不會出錯

[英]how come we don't get error when we define Structure in C for linked list

以鏈接列表定義的結構為例...

struct test_struct                                         line 1    
{                                                          line 2    
    int val;                                               line 3
    struct test_struct *next;                              line 4
};                                                         line 5

在第4行,由於test_struct甚至沒有完全定義(我假設結構在第5行完全定義,因為';',之前我們不能說結構是定義的)那么為什么我們不會在第4行得到錯誤test_struct沒有定義......?

確實struct test_struct在結束之前沒有完全定義; 在第4行,你只是定義了一個指向不完整類型指針 ,這很好。

要定義struct test_struct類型的完整對象,編譯器需要知道有關該對象的完整信息。 但是要定義指向某種類型的指針,則不需要它。

例如,你做不到:

struct test_struct                                         
{                                                          
    int val;                                               
    struct test_struct value;                              
};

因為要定義value ,需要有關對象類型的完整信息。 但是要定義struct test_struct* ,它不是必需的。

在您的示例中,您定義了一個自引用結構。 自引用結構包含一個或多個指針(如第4行所定義)! 自引用結構通常需要使用動態內存句柄子例程(如free和malloc)來處理。 在您的情況下,您只需定義一個指向類型的指針,該類型在文件完成時及時處理。 在編譯時,C編譯器計算指針需要指向的內存字節,並且在那時您的結構已經完全定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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