当我们在C中为链表定义Structure时,我们怎么也不会出错

时间:2014-03-28 19:41:44

标签: c structure

以链接列表定义的结构为例......

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

在第4行,由于test_struct甚至没有完全定义(我假设结构在第5行完全定义,因为&#39 ;;',之前我们不能说结构是定义的)那么我们怎么样在第4行没有得到错误,即没有定义test_struct ......?

2 个答案:

答案 0 :(得分:5)

确实struct test_struct在结束;之前没有完全定义,在第4行,你只是定义了一个指向不完整类型的指针,这很好。

要定义类型为struct test_struct的完整对象,编译器需要知道有关该对象的完整信息。但要定义指向某种类型的指针,则不需要它。

例如,您不能这样做:

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

因为要定义value,需要有关对象类型的完整信息。但要定义struct test_struct*,则不需要。

答案 1 :(得分:1)

在您的示例中,您定义了一个自引用结构。自引用结构包含一个或多个指针(如第4行所定义)!自引用结构通常需要使用动态内存句柄子例程(如free和malloc)来处理。在您的情况下,您只需定义一个指向类型的指针,该类型在文件完成时及时处理。在编译时,C编译器计算指针需要指向的内存字节,并且在那时您的结构已经完全定义。