使用关键字' struct'声明struct对象和malloc

时间:2015-10-18 06:55:15

标签: c struct

我目前正在阅读一本关于用C语言编写的算法的书,我注意到当作者要声明/创建一个struct对象时,他会这样做(结构已经被定义了):

struct hashTable * h;

而且:

struct hashTableNode ** table;

即使在调用malloc时他也会这样做:

h = malloc(sizeof(struct hashTable));

因此,当我编写代码时,我尝试了它而没有使用' struct'在上述声明中,看看它是否仍然有效,因为已经定义了结构。他们确实做到了。所以我的问题是为什么' struct'在这些声明中需要,因为它只会使代码行更长。是绝对必要的吗?或者它只是一些安全的'使代码更兼容的技术?

1 个答案:

答案 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;
}