typedef:用来为复杂的声明定义简单的别名,它与宏定义有些差异(注意行末加;)。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
struct:它是由若干“成员”组成的结构,用作定义结构体类型。
介绍几种typedef和struct的组合方式:
1.从最基础开始
//日常定义一个结构体
struct testa
{
int a;
int b;
int c;
};
struct testa a;
//当使用typedef后
typedef struct testa TEST;
struct testa
{
int a;
int b;
int c;
};
TEST a;
//甚至你可以这样,表达的意思是一样,区分类型struct TEST和标签TEST
typedef struct TEST TEST;
struct TEST
{
int a;
int b;
int c;
};
TEST a;
2.精简一下
typedef struct testa
{
int a;
int b;
int c;
}TEST;
TEST a;
3.然后你或许会发现,struct关键字后的 标签 貌似没有实际作用
typedef struct
{
int a;
int b;
int c;
}TEST;
TEST a;
这样的编译是通过的,但是这样定义的结构体和一般的结构体变量的区别就是:
1、他不能作为参数传递给一个函数,因为编译器无法对他进行类型检查;
2、也不能使被调用的函数返回一个没有结构体名的结构体变量,原因同1。
引用:https://bbs.csdn.net/topics/41141