Struct和typedef Struct详解 | ICHARM

首页 » 博文 » Code » 正文

Struct和typedef Struct详解

哀差闷最近在看一些Win32API的资料,发现windows的一些结构体的声明有些奇特。看不懂!关键还是C语言的基本知识点忘得差不多了。所以结合网友的博文和C primer plus一书,整理了这篇博文。

Typedef

typedef能够为某一类型创建别名。在这个方面和#define有点类似。但他们有三个主要不同的地方。

  • 与#define不同,typedef给出的符号名称仅限于对类型,而不是对值。
  • typedef的解释由编译器,而不是预处理器执行。
  • typedef的范围有限,但在其受限的范围内,typedef比#define更灵活。

Struct

先声明一个结构体,再声明一个该结构体的变量StudentA

struct Student
{
  int a;
};
struct Student StudentA;//在C语言中这里的struct关键词绝对不能少!在C++中可以省略struct关键词!
Student StudentB;       //在c++中可以这样声明

声明一个结构体的同时,声明一个该结构体的变量StudentA

struct Student
{
  int a;
}StudentA, *lpStudent; //同时声明一个指向Student结构体变量的指针。

Typedef Struct

先声明一个结构体,再声明一个该结构体的变量StudentA.

下面的示例中typedef 为struct Stu取了一个别名Student,此时在C中用这个别名来声明新的变量,则不需要Struct关键词。因为别名Student等同于 struct Stu

使用typedef的时候结构体的标识Stu是可以省略的。

typedef struct Stu
{
  int a;
}Student;
Student StudentA; //等同于 struct Stu StudentA;

声明一个结构体的同时,是没办法同时声明一个结构体的变量的!!!

typedef struct Stu
{
  int a;
}Student, SchoolMate,*lpStudent; // 这里Student和SchoolMate都是struct Stu的别名。而lpStudent则是指向该结构体的指针类型。
Student StudentA; //等同于 struct Stu StudentA;
SchoolMate StudentB;
lpStudent lpStu;
lpStu = &StudentA;

参考

struct和typedef struct彻底明白了

 

发表评论