加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么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已经提供了自己的机制(星号)时,它会尝试将某种东西(类型是指针的事实)编码到类型的名称中.显示这个.它使它非常混乱并打破了星号的对称性,这在声明和使用指针时都会出现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读