解决方案 »

  1.   

    照你这么说,如果函数先声明,再调用,而实现放在最后。按理说调用它的时候还没有实现,就不能调用。
    实际上,C 语言不仅支持你说的那种情况,甚至这样都可以的:
    typedef struct _item_a ItemA;
    typedef struct _item_b ItemB;struct _item_a {
        ItemB *ptr;
        int data;
    };struct _item_b {
        ItemA *ptr;
        int data;
    };
      

  2.   

    struct MyClass
    {
            int a;
            MyClass *p
    }不管什么类型的指针,在32位程序里面都是32位四个字节。
    所以说这个MyClass已经很明确了,总共8个字节,完全有意义啊。
      

  3.   

    struct MyClass;void main()
    {
    MyClass *p = 0;
    }
    就像这段代码完全合法一样,MyClass具体是什么都不知道,但仍然可以使用它的指针,因为不管它是什么类型的指针,都是四个字节,都是一样的
      

  4.   

    你只要记住一点,编译器很聪明,能够明白你这段代码代表什么意思,就够了,如果再要深究,就只能研究编译原理了。编译器先看到你定义了结构,然后看见你在这个结构体中又使用了这个结构,因为编译器已经知道这是一个结构体,所以他可以处理这种情况。如果你把结构中的struct node *next; 这一句,替换成}ListNode *next; 编译器就会报错,因为他还没有看见过这个ListNode是什么东西。另外,你不能在你的结构体中,再定义一个非指针类型的同样的结构体,例如struct node next;(注意,没有星号),这时,编译器也应该报错,为什么,因为这会导致定义的无限延伸!也就是说,这个定义是一个死循环,永远停不下来。
      

  5.   

    C语言中的代码里,编译器都是先读main()函数的。