可能重复:
Why should we typedef a struct so often in C?
Difference between ‘struct’ and ‘typedef struct’ in C++?
以下类型声明有什么区别?
struct Person
{
int age;
};
typedef struct
{
int age;
}Person;
我理解
struct
{
int age;
}Person;
创建名为person的未命名结构的实例,其中
struct Person
{
int age;
};
声明一个名为person的类型,但不是实例。但是我仍然没有得到typedef的功能。
答案 0 :(得分:4)
我认为这与C中的相同,typedef创建了一个类型的别名...在第一种情况下,类型的名称是“struct Person
”,而在第二种情况下只是“{ {1}}”。
通常,当您必须声明自引用结构(如列表)时,您同时使用两者,因为typedef在定义结构之前不会生效(除非您进行前向声明),例如:
Person
现在您可以通过以下方式声明相同类型的变量:
typedef struct node {
void *data;
struct node *next;
} TNode, *PTNode;
上面的三个变量是相同的,指向节点结构的指针。
答案 1 :(得分:2)
解释了在{C}中对结构使用typedef here。 (在C ++中,结构只是具有默认公共成员的类,而默认情况下类成员是私有的)
答案 2 :(得分:2)
在C中,结构体存在于它们自己的名称空间中,因此如果要使用结构体的类型名称,则必须编写struct Person
。 typedef
消除了对该前缀的需要。
在C ++中,结构与其他所有结构都存在于同一名称空间中,因此不需要这样做。它通常被视为不必要的C-ism。
答案 3 :(得分:0)
C-兼容性 在c ++中基本相同,那里有传统的c代码
当你以这种方式进行定义时,不确定在未命名的struct中引用静态函数和typedef - 我从来没有这样做。
答案 4 :(得分:0)
将Person或struct Person传递给函数
时可以区分如果你定义了
struct Person { ... };
您应该将它传递给明确声明它是结构
的函数void foo(struct Person person) { ... }
另一方面,如果你定义了
typedef struct Person { ... };
你不能声明它是一个结构,因为关键字typedef允许你实际定义一个数据类型,在这种情况下是Person并且你以这种方式传递它
void foo(Person person) { ... }
非常像其他任何数据类型
希望这有帮助
答案 5 :(得分:0)
在C ++中, typedefs 是其他类型的同义词,而不是不同类型。它们通常用于两个目的:
创建可移植代码,您可以在其中抽象出具体的平台。在一个平台上,您可以typedef int int32
和另一个平台typedef long int32
。您可以在整个代码中使用int32
,当移植到新平台时,您只需要修改typedef以符合您的要求。
为非常复杂的类型创建别名。例如。 typedef char const* const* cppchar
。您现在可以编写char const* const*
。
cppchar