电子发烧友网 > 可编程逻辑 > HDL语言及源代码 > 正文

typedef struct的用法

2017年11月09日 17:20 次阅读

  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

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

typedef结构体定义

typedef为这个新的结构起了一个名字,叫MyStruct。typedef struct tagM...

发表于 2017-11-09 16:55 245次阅读
typedef结构体定义

typedef的用法

typedef 有一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫 REAL 的浮点...

发表于 2017-11-09 16:32 156次阅读
typedef的用法

c语言中typedef的用法

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储...

发表于 2017-11-09 15:23 273次阅读
c语言中typedef的用法

typedef和define区别

typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异。它本身是一种存储...

发表于 2017-11-09 14:22 199次阅读
typedef和define区别

typedef是什么意思

typedef是在计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异。它本身是一种存储...

发表于 2017-11-09 14:03 360次阅读
typedef是什么意思

8:1 Mux-Amps Form Large ...

8:1 Mux-Am

发表于 2009-04-20 11:16 584次阅读
8:1 Mux-Amps Form Large ...