我写了以下程序:
typedef struct blahblah {
int x;
int y;
} Coordinate;
int main () {
Coordinate p1;
p1.x = 1;
p1.y = 2;
//blah blah has not been declared as a struct, so why is it letting me do this?
struct blahblah p2;
p2.x = 5;
p2.y = 6;
}
任何人都可以向我解释发生了什么事吗?
答案 0 :(得分:10)
你说:
blah blah尚未被声明为结构,
实际上,它有:
typedef struct blahblah {
int x;
int y;
} Coordinate;
这既是typedef Coordinate
,也是struct blahblah
的定义。定义的含义是:
struct blahblah
int x
和int y
。 Coordinate
的类型定义,该定义等同于struct blahblah
答案 1 :(得分:2)
您的结构声明等同于
struct blahblah {
int x;
int y;
};
typedef struct blahblah Coordinate;
由于这会为结构类型(struct blahblah
)和Coordinate
创建两个名称,因此两个类型名称都允许用于声明变量。
答案 2 :(得分:2)
typedef
定义了新的用户定义数据类型,但不会使旧定义无效。例如,typedef int INT
不会使int
无效。同样,您的blahblah
仍然是有效的定义结构!而Coordinate只是一种新型!
答案 3 :(得分:0)
你在你的typedef中声明blahblah是一个结构。 typedef只是引用struct blahblah的简单方法。但是结构blahblah存在,这就是为什么你可以给它一个typedef。
答案 4 :(得分:0)
typedef用于创建一种类型的别名。你实际上是在typedef本身声明'struct blahblah'。这有点令人困惑,但正如@Timothy和其他人所说,这是一个有效的定义。