c语言中的typedef struct相当于java的一个类?,C ++中'struct'和'typedef struct'之间的区别?...

在C ++中,之间有什么区别:

struct Foo { ... };

typedef struct { ... } Foo;

#1楼

您不能对typedef结构使用forward声明。

struct本身是一个匿名类型,因此您没有实际名称来转发声明。

typedef struct{

int one;

int two;

}myStruct;

像这样的前瞻声明不会起作用:

struct myStruct; //forward declaration fails

void blah(myStruct* pStruct);

//error C2371: 'myStruct' : redefinition; different basic types

#2楼

C ++中'typedef struct'和'struct'之间的一个重要区别是'typedef structs'中的内联成员初始化将不起作用。

// the 'x' in this struct will NOT be initialised to zero

typedef struct { int x = 0; } Foo;

// the 'x' in this struct WILL be initialised to zero

struct Foo { int x = 0; };

#3楼

Struct是创建数据类型。 typedef用于设置数据类型的昵称。

#4楼

C ++没有区别,但是我相信它会允许你在不明确地执行的情况下声明struct Foo的实例:

struct Foo bar;

#5楼

在C ++中,只有一个微妙的区别。 这是C的延续,它有所作为。

C语言标准( C89§3.1.2.3 , C99§6.2.3和C11§6.2.3 )要求为不同类别的标识符分别命名空间,包括标记标识符 (用于struct / union / enum )和普通标识符 (用于typedef和其他标识符)。

如果你刚才说:

struct Foo { ... };

Foo x;

您会收到编译器错误,因为Foo仅在标记名称空间中定义。

您必须将其声明为:

struct Foo x;

每当你想要引用Foo ,你总是要把它称为struct Foo 。 这会很快烦人,所以你可以添加一个typedef :

struct Foo { ... };

typedef struct Foo Foo;

现在struct Foo (在标记命名空间中)和普通Foo (在普通标识符命名空间中)都引用相同的东西,并且您可以在没有struct关键字的情况下自由声明Foo类型的对象。

构造:

typedef struct Foo { ... } Foo;

只是声明和typedef的缩写。

最后,

typedef struct { ... } Foo;

声明一个匿名结构并为其创建一个typedef 。 因此,使用此构造,它在标记名称空间中没有名称,只有typedef名称空间中的名称。 这意味着它也无法向前宣布。 如果要进行前向声明,则必须在标记名称空间中为其指定名称 。

在C ++中,所有struct / union / enum / class声明都像隐式typedef一样,只要该名称不被另一个具有相同名称的声明隐藏。 有关详细信息,请参阅Michael Burr的答案 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值