typedef 在 c/c++中 几种声明struct的区别和影响

typedef 用来声明新的数据类型,利用编译器来实现类型安全检查
基本结构为

typedef 原类型 新类型
typedef int uint32
typedef struct student stu //student 是已经声明好的类型。
                           //stu 是通过typedef 新声明的类型

在c 中,不加typedef时,声明结构体类型主要有3种

struct Student
{
  int data;
};
//常规型,使用时直接
struct Student Stu1;
struct Student
{
   int data;
}Stu1,Stu2;
//附加型,这种形式在声明的同时附加定义了两个全局结构体变量,可以直接使用变量如
Stu1.data=1;
Stu2.data=2;
//如果要定义新的数据类型,需要
struct Student Stu3;
struct
{
  int data;
}Stu1;
//一次性型,比较少见,只能使用声明好的全局变量,也不能定义新变量
Stu1.data=1;

c中,加了typedef 时

  • 对于常规型
typedef struct Stu* pStu; //因为下面并没有成功声明新类型,所以需要加struct
typedef struct Student //这里的typedef 形同虚设,结尾没有变量名相当于没有新别名
{
  int data;
};
//使用时直接
struct Student Stu1;  //结构体变量
pStu  pstu1 = NULL;  //结构体指针变量
  • 对于附加型
typedef Stu1* pStu; //这里struct 可加可不加
typedef struct Student 
{
  int data;
}Stu1,Stu2;//这里的名字相当于结构体类型别名了
//也就是”struct...}“这部分构成一个已定义的结构体类型,
//相当于typedef s...} Stu1  
//     typedef Stu1  Stu2
//使用时直接
Stu1 student1;  //结构体变量
Stu2 student2;  
pStu  pstu1 = NULL;  //结构体指针变量
  • 对于一次性型,typedef 引起的性质改变挺大
typedef Stu1* pStu; //这里加了struct时 定义指针类型变量平台会报错
typedef struct
{
  int data;
}Stu1;
//对于这种写法,Stu1为新类型名,但是无法声明新的类型名,使用时可以
Stu1 stu;//变量
pStu p1;//指针变量

在c++中,限制不那么大

//在c++里很简单,直接
    struct Student
    {
    int a;
    };    
    //于是就定义了结构体类型Student,声明变量时直接
    Student stu2;

至于其他的,和c差不多

总结,无 typedef时,在末尾定义的是全局变量,可以直接使用它
有typedef 时,在末尾定义的是结构类型,相当一个新的名字

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值