结构体中的*问题,小白?

(编译器为dev)

#include <stdio.h>

int main()
{
    struct Test
    {
        int x;
        int y;
        struct Test  test;    
    };
    return 0;

}

则报错,是不是因为没有结束条件

若在test前加上*,则运行,运行结果为无内容

若加上*,是不是表示test是指向结构体Test的指针,是不是就相当于定义一个指针(如int *a)
    
 

你在数据类型的定义中定义由这个数据类型定义的变量,系统无限申请内存,所以就报错了。

在test前加上*test,表明定义了一个结构体类型的指针变量,系统只是分配x,y,和test指针的内存空间给你就行了。

就算你正确定义好了结构体类型,你又没有定义变量然后输出变量的成员值,怎么会有输出呢

结构体就是一个数据类型,你不能在一个数据类型内部调用这个数据类型,只能用指针,一般来说结构体在main函数上面, 

struct Test
    {
        int x;
        int y;   
    }test;

可以这样声明,也可以在main函数内声明Test test;

1.关于带*后可以运行的解释 

struct Test
    {
        int x;
        int y;
        struct Test  test;    
    };

如果不加*就是一个元限循环定义,系统无法实现所以是一个错误的定义。

struct Test *test;//代表这里只是一个指针变量,指针的类型是一个结构体。指针变量就可以分配固定的空间。

所以加了*就可以编译通过和运行。

2.无结果是因为你的程序本身也没有写任何输出的代码所以不会输出任何结果。