为什么struct的tagName经常与typedef的名称不同?
发布时间:2020-12-16 10:16:24 所属栏目:百科 来源:网络整理
导读:有时我会看到这样的代码(我希望我能正确记住它): typedef struct st { int a; char b;} *stp; 虽然我熟悉的通常模式是: typedef struct st { int a; char b;} st; 那么第一个代码示例中的优势是什么? 解决方法 你可能是这个意思: typedef struct ST { /*
有时我会看到这样的代码(我希望我能正确记住它):
typedef struct st { int a; char b; } *stp; 虽然我熟悉的通常模式是: typedef struct st { int a; char b; } st; 那么第一个代码示例中的优势是什么? 解决方法
你可能是这个意思:
typedef struct ST { /* fields omitted */ } *STP; 星号位于声明的末尾.这只是意味着“将类型STP定义为指向此类结构的指针”.不需要struct标签(ST),它只在您希望能够稍后引用结构类型时才有用. 你也可以同时拥有这两个: typedef struct { /* fields omitted */ } ST,*STP; 这样可以使用ST来引用结构类型本身,使用STP来指向ST的指针. 我个人认为在typedef中包含星号是一种非常糟糕的做法,因为当C已经提供了自己的机制(星号)时,它会尝试将某种东西(类型是指针的事实)编码到类型的名称中.显示这个.它使它非常混乱并打破了星号的对称性,这在声明和使用指针时都会出现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容