您现在的位置: 主页 > 嵌入式处理器 > FPGA > typedef struct的用法 - HDL语言及源代码 -
本文所属标签:
为本文创立个标签吧:

typedef struct的用法 - HDL语言及源代码 -

来源: 网络用户发布,如有版权联系网管删除 2018-08-18 

  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的这种用途二不是很大,但是理解了它,对掌握以前的旧代码还是有帮助的,毕竟我们在项目中有可能会遇到较早些年代遗留下来的代码。



              查看评论 回复



嵌入式交流网主页 > 嵌入式处理器 > FPGA > typedef struct的用法 - HDL语言及源代码 -
 

"typedef struct的用法 - HDL语言及源代码 -"的相关文章

网站地图

围观()