c++--typedef的作用和用法

最近在学数据结构结构的时候发现对typedef的学习不过透彻,就来学习补充一下。

1.首先了解共同体和结构体的区别

共同体:把不同类型的数据组合成一个整体,自定义类型。

union Person{
	int age;
	char name[256];
	char sex[2];
};

结构体: 使几个不同类型的变量共同占用一段内存。

struct person1
{
    int age;
    char name[256];
    char sex[2];
};

区别:共同体只会存储那个最大的变量,结构体会把结构体里面的所有变量

我们可以用sizeof方法来测试一下,我们可以看到共同体只存储最大的内存变量256,而结构体会将所有的内存变量相加:
在这里插入图片描述

2.枚举

enum COLOR{
    FALSE=0,
    TRUE=1,
};

枚举的使用:int i=FALSE;这里只是做一个简单的例子,枚举的作用是:当需要表示一组特定的预定义状态时,枚举类型对于代码可读性而言非常有用。会让代码可调用和可读性性更好。

3.结构体定义的方式

1.常规定义:

struct time{
    int hour;
    int minute;
    int second;
};

不过需要单独进行声明:struct time t;

2.声明的同时进行定义

struct time1{
    int hour;
    int minute;
    int second;    
}t1,t2;

3.使用结构体作为成员

struct time2{
    int hour;
    int minute;
    int second;
};

struct person2{
    char name[256];
    struct time2 birthday;
};

4.匿名结构体

struct {
    int hour;
    int minute;
    int second;
}t3;

4.typedef的作用和用途

作用:
1.一个是给变量一个易记且意义明确名字。
2.另一个是简化一些比较复杂的类型声明。

就是如果你原来结构体的名字太长,太复杂的话,可以使用typedef重新起一个名字。这种情况一般是你编写的代码比较多的时候会使用到。

1.与#define的区别

typedef 行为有点像 #define 宏,用其实际类型替代同义字。不同点是 typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。

程序运行分为这四个阶段:
在编译的时候被解释的话,可以使用编译器提前应付。

1、预处理:条件编译,头文件包含,宏替换的处理,生成.i文件。
2、编译:将预处理后的文件转换成汇编语言,生成.s文件
3、汇编:汇编变为目标代码(机器代码)生成.o的文件
4、链接:连接目标代码,生成可执行程序

2.声明多个指针对象

没有使用typedef的情况:

char* pa, pb;//只有pa定义为了char指针类型,pb为char类型

使用typedef的情况:

typedef char* PCHAR;
PCHAR pa, pb;  //两个都为char指针类型

3.直观简洁

没有使用typedef的情况。声明struct新对象时,必须要带上struct,如:

struct tagPOINT1
 {
    int x;
    int y; 
};
struct tagPOINT1 p1;

如果使用typedef 的情况时,可以不要写struct

typedef struct tagPOINT
{
    int x;
    int y;
}POINT;

POINT p1;

这种用途一般也是代码比较多的时候,作用才比较大。

4.平台无关性

typedef 有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:

typedef long double REAL; 

在不支持 long double 的机器上,该 typedef 看起来会是下面这样:

typedef double REAL; 

并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样:

  typedef float REAL; 

也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。

参考原文博客:https://blog.csdn.net/wangqiulin123456/article/details/8284939

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值