【发布时间】:2013-10-28 00:49:28
【问题描述】:
我正在阅读 K&R 的 The C Programming Language,在结构部分中我遇到了这些代码 sn-ps:
struct maxpt = { 320, 200 };
和
/* addpoints: add two points */
struct addpoint(struct point p1, struct point p2)
{
p1.x += p2.x;
p1.y += p2.y;
return p1;
}
在第一种情况下,它看起来像是将值 320 和 200 分配给变量 maxpt 的成员。但是我注意到缺少结构类型的名称(不应该是“struct struct_name maxpt = {320, 200}”吗?在第二种情况下,函数返回类型只是“struct”而不是“struct name_of_struct”。
我不明白为什么它们不包含结构名称 - 它如何知道它正在处理的特定类型的结构?我的困惑是因为在以前的 sn-ps 中它们确实包含结构名称,例如在以下函数的返回类型中,它是“结构点”而不仅仅是“结构”。为什么它们在某些情况下包含名称而在其他情况下不包含?
/* makepoint: make a point from x and y components */
struct point makepoint(int x, int y)
{
struct point temp;
temp.x = x;
temp.y = y;
return temp;
}
【问题讨论】:
-
您参考的是哪个版本?这是在哪个页面上?
-
struct maxpt = { 320, 200 };不会编译。我几乎确定这实际上不在你的书中。如果是,那就错了。 -
我对您所指的 K&R 中的部分隐约熟悉,有跨页进行的对话,有时第 x 页上的声明将对变量定义进行观察在第 x-3 页创建。在那本书中很常见。
-
@CarlNorum,是的...
typedef struct { int a, int b } TEMP;然后TEMP temp = {234, 345 }; -
是的,有什么作用?该示例中没有缺少标记,
struct关键字是,因为typedef。 OP的问题没有这种情况。