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