C结构不定义类型?

Tro*_*orn 3 c

我刚开始用专业的Java背景和一些(如果没有太多)C++知识学习C,我很惊讶这在C中不起作用:

struct Point {
    int x;
    int y;
};

Point p;

p.x = 0;
p.y = 0;
Run Code Online (Sandbox Code Playgroud)

似乎我必须声明p使用struct Point作为类型或使用typedef.这段代码在C99中有效吗?或者这是一个"C++的东西"?

Mik*_*uno 7

据我所知,它不应该在没有typedefC99的情况下工作(因为这只是C的工作方式),但它确实在C++中工作,因为struct在C++中class默认情况下所有成员都是公共的.


Rem*_*o.D 5

不,结构不定义新类型.你需要的是:

typedef struct {
   int x; int y;
} Point;
Run Code Online (Sandbox Code Playgroud)

现在Point是你可以使用的新类型:

Point p;
p.x = 0; p.y = 0;
Run Code Online (Sandbox Code Playgroud)

  • 结构确实定义了一种类型.这就是为什么在定义`struct Foo`之后,我可以声明一个变量`struct Foo a`. (3认同)
  • 对; 混淆点是struct*tag*本身不作为类型名称; 它必须以`struct`关键字开头. (2认同)