typedef struct的用法

HDL语言及源代码

6人已加入

描述

  typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。

  具体区别在于:

  若struct node{ }这样来定义结构体的话。在定义 node 的结构体变量时,需要这样写:struct node n;

  若用typedef,可以这样写:typedef struct node{}NODE; 。在申请变量时就可以这样写:NODE n;其实就相当于 NODE 是node 的别名。区别就在于使用时,是否可以省去struct这个关键字。

  首先:

  在C中定义一个结构体类型时如果要用typedef:

  typedef struct Student

  {

  int no;

  char name[12];

  }Stu,student;12345

  于是在声明变量的时候就可:Stu stu1;或者:student stu2;(Stu 和student 同时为Student的别名)

  如果没有typedef即:

  struct Student

  {

  int no;

  char name[12];

  }Stu;12345

  就必须用struct Student stu1;或者struct Stu stu1;来声明

  另外这里也可以不写Student(于是也不能struct Student stu1;了)

  typedef struct

  {

  int no;

  char name[12];

  }Stu;12345

  其次:

  在c++中如果用typedef的话,又会造成区别:

  struct Student

  {

  int no;

  char name[12];

  }stu1;//stu1是一个变量12345

  typedef struct Student2

  {

  int no;

  char name[12];

  }stu2;//stu2是一个结构体类型,即stu2是Student2的别名12345

  使用时可以直接访问stu1.no

  但是stu2则必须先定义 stu2 s2;

  然后 s2.no=10;

  用法小结

  第一、二个用途

  用途一:

  定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:

  char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,

  // 和一个字符变量;

  以下则可行:

  typedef char* PCHAR; // 一般用大写

  PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针

  虽然:

  char *pa, *pb;

  也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。

  用途二:

  用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名 对象名,如:

  struct tagPOINT1

  {

  int x;

  int y;

  };

  struct tagPOINT1 p1;

  而在C++中,则可以直接写:结构名 对象名,即:

  tagPOINT1 p1;

  估计某人觉得经常多写一个struct太麻烦了,于是就发明了:

  typedef struct tagPOINT

  {

  int x;

  int y;

  }POINT;

  POINT p1; // 这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候

  或许,在C++中,typedef的这种用途二不是很大,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分