我目前正在阅读一本关于用C语言编写的算法的书,我注意到当作者要声明/创建一个struct对象时,他会这样做(结构已经被定义了):
struct hashTable * h;
而且:
struct hashTableNode ** table;
即使在调用malloc时他也会这样做:
h = malloc(sizeof(struct hashTable));
因此,当我编写代码时,我尝试了它而没有使用' struct'在上述声明中,看看它是否仍然有效,因为已经定义了结构。他们确实做到了。所以我的问题是为什么' struct'在这些声明中需要,因为它只会使代码行更长。是绝对必要的吗?或者它只是一些安全的'使代码更兼容的技术?
答案 0 :(得分:1)
这取决于是否有typedef
为此结构提供别名。当您发现相同的代码在没有struct
关键字的情况下工作时,它可能会调用结构的别名。
更具体地说,当没有typedef
时,你必须给编译器一个提示,你的个人名称hashTable
是一个结构,如下所示:
struct hashTable{
int a, b;
};
int main ()
{
struct hashTable t1;
}
人们经常使用typedef
为结构提供别名。在这种情况下,编译器已经知道别名实际上是您之前定义的结构,因此您不再需要struct
关键字。以下代码也可以使用:
typedef struct hashTable{
int a, b;
}apple;
int main ()
{
apple t1;
}
最后,您必须找出为什么我们不将结构名称作为其别名?因此,以下代码可能效果最好:
typedef struct hashTable{
int a, b;
}hashTable;
int main ()
{
struct hashTable t1;
hastTable t2;
}
<强>更新强>
在C ++中,您实际上可以创建struct
,并声明实例只使用结构的名称。例如:
struct hashTable{
int a, b;
};
int main ()
{
hashTable t1;
}