typedef struct的用法

typedef struct的用法,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2598955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-09
下一篇 2022-08-09

发表评论

登录后才能评论

评论列表(0条)

保存