玩转C语言之自定义数据类型-typedef
玩转C语言之自定义数据类型-typedef
1 引言
引言:在C语言中没有提供字节类型,如果在工程中需要使用表示字节的变量时,该怎么办呢?
我们知道 1 个字节占用 8 个二进制位空间,解决这个问题的办法就是找个占用 8 个二进制位的内存空间的类型即可。
令我们开心的是, char
类型占用的内存空间正是 1 个字节,因此可以用 char
类型表示字节类型。
由于 char
类型表示的数值范围是 [-128, 127],1 个字节表示的范围是 [0, 255],为了能够完全代替,我们使用 unsigned char
代表一个字节类型,unsigned char
表示的数值范围正是 [0, 255]。
那么我们如果定义一个字节类型的数据,通过下面的方式即可:
unsigned char byte;
通过上面这种方式,总是感觉怪怪的,因为不能够清晰的看出 byte
是一个字节类型的数据。如果是我们自己阅读代码的话,还是能够明白怎么回事的,但是身处这个开源、分享的领域,那么对于同行来说,他们就很难读懂我们的代码。
因此,为了解决这个问题,那么有请这篇文章的主人公闪亮登场——typedef
。
2 什么是 typedef
typedef
是 C
语言中的类型命名关键字,通过这个关键字可以对类型赋予新的名字。其语法结构如下:
typedef Type NewTypeName;
Type
为已有的数据类型Name
为这个数据类型的新名字
注意:
typedef
并没有创建新的数据类型,而是对已有的数据类型赋予新的名字而已!!!
下面通过一个示例,练习一下 typedef
关键字的使用。
typedef unsigned char byte;int main()
{byte b= 128;printf("sizeof(byte) = %d\n", sizeof(byte));printf("b = %u\n", b);return 0;
}
3 typedef 的应用
对于 typedef
的应用,在下面的场合中用的比较多:
typedef
在函数中定义“局部类型名”typedef
简化类型名(如:unsigned long long
)typedef
定义类型名,能够以统一的方式创建变量(Type var;)
typedef 的应用方法
- 先按定义变量的方法写出定义体
- 将变量名换成新类型名
- 在最前面加上
typedef
- 然后可以用新类型名定义变量
按定义变量的方式,把变量名换上新类型名,并且在最前面加
typedef
,即声明了新类型名代表原来的类型。
(1)命名一个新的类型名代表结构体类型
typedef struct
{int month;int day;int year;
} Date;
上面声明了一个新类型名
Date
,代表一个结构体类型,可以使用新的类型名定义变量,如:
Date birthday;
Date *p;
(2)命名一个新的类型名代表数组类型
typedef int Num[100];
Num a;
(3)命名一个新的类型名代表指针类型
typedef char *String;
String p, s[10]; // p 为字符指针变量,s 为字符指针数组
(4)命名一个新的类型名代表指向函数的指针类型
typedef int (*P)();
P p1, p2;
下面通过两个例子,加深一下 typedef
的应用:
demo one
#include <stdio.h>typedef unsigned char byte;// 在函数的内部创建类型的新名字
// 这种情况下是具有局部的特性,出了这个函数就没有作用了
void func()
{typedef byte uint8;uint8 var = 200;printf("sizeof(uint8) = %d\n", sizeof(uint8));printf("var = %u\n", var);
}int main()
{byte b = 128;func();printf("sizeof(byte) = %d\n", sizeof(byte));printf("b = %u\n", b);return 0;
}
demo two
#include <stdio.h>// 为 float[5] 定义新的名字为 fArray5
typedef float(fArray5)[5];
// 为 int(int, int) 定义新的名字为 iFuncII
typedef int(iFuncII)(int, int);float array[5] = {0.1, 0.2, 0.3, 0.4, 0.5};
int add(int a, int b)
{return a+b;
}int main()
{// 定义一个名为 pa、元素类型为 float、元素个数为 5、值为数组 array 的地址的数组指针fArray* pa = &array;// 定义一个名为 pf 的指针iFuncII* pf = add;int i = 0;for(i=0; i<5; i++){printf("%f\n", (*pa)[i]);}printf("%d\n", pf(i, i+1));return 0;
}
4 typedef 用法进阶
(1)typedef
与 #define
的区别
#define
是在预编译时处理的,只能作简单的字符串替换typedef
是在编译阶段处理的
(2)当不同源文件中用到同一类型时,常用 typedef
声明一些数据类型,可以把所有的 typedef
名称声明放在一个头文件中,然后在需要的文件中通过 #include
指令将其包含到文件中
(3)使用 typedef
有利于程序的通用与移植
玩转C语言之自定义数据类型-typedef相关推荐
- 易语言数据类型与c 对照,易语言利用自定义数据类型和数组. 制作键对值操作类/内存配置...
易语言利用自定义数据类型和数组. 制作键对值操作类/内存配置.版本 2 .支持库 spec .子程序 _临时子程序 .局部变量 test, classKeyValue .局部变量 局_取值方法2, ...
- C语言_自定义数据类型
目录 1.自定义数据类型_结构体 1.1 结构体类型的声明 1.1.1 匿名结构体 1.2 结构体的自引用 1.2.1 Typedef结构体重命名: 1.3 结构体变量的定义和初始化 1.4 结构体内 ...
- C语言之——自定义数据类型
目录 前言:什么是自定义数据类型 ? 一,自定义数据类型之:数据类型命名 1,深入应用typedef: 二,自定义数据类型之:结构体类型命名 1,深入理解struct结构体: 三,自定义数据类型之:联 ...
- 易语言 取自定义数据类型的大小
先说一下易语言的变量储存机制 易语言有基本数据类型和复合数据类型两种 基本数据类型包括:1. 各种整数 2.各种浮点 3. 逻辑值 他们都是储存在栈上的 大小都是固定的 用不着取 复合类型一般储存在堆 ...
- 易语言调用c 自定义数据类型,跟我入门易语言 14 自定义数据类型
自定义数据类型是一种特殊的数据类型,它与我们之前学习过的常见数据类型不同,我们自己也可以自己创建数据类型!一个自定义类型可以由许多成员组成,每一个成员可以是各种常见数据类型,甚至一个自定义数据类型中还 ...
- 易语言自定义数据类型转c,一步一步跟我学易语言之自定义数据类型
自定义数据类型 什么是"自定义数据类型"?顾名思义,就是用户可以随时在程序中自行定义新的数据类型.自定义数据类型时需要设置数据类型的名称及其成员.数据类型成员各属性的设置方法等同于 ...
- 自动生成员工号c语言,C语言自定义数据类型
C语言自定义数据类型 第7章 自定义数据类型7.1 结构体类型 7.2 共用体 7.3 枚举类型 7.4 用typedef声明类型C+提供了许多种基本的数据类型(如int.float. double. ...
- 【剑仙教程】易语言的结构体。自定义数据类型。
1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...
- 剑仙java_【剑仙教程】易语言的结构体。自定义数据类型。
1楼. [剑仙教程]易语言的结构体.自定义数据类型. 在易语言中,有基本数据类型,自定义数据类型. 自定义数据类型,在C语言/C++中称为结构体.这是面向对象和类的编程. . . 先上代码.打开易语言 ...
最新文章
- 性能测试---商场模型分析
- CVPR2020 | 商汤-港中文等提出PV-RCNN:3D目标检测新网络
- 使用POI创建word表格-在表格单元格中创建子表格
- OpenCV中Mat类的重载运算符operator()的用法
- 计算机软件出版,[计算机软件及应用]出版信息管理系统.doc
- Linux环境用Sendmail架设Mail服务器
- 「深圳云栖大会」大数据时代以及人工智能推动下的阿里云异构计算
- 机器学习基础(二十二)—— decision tree
- 机器学习-数据科学库-day1
- ZOJ 4067 Books (2018icpc青岛J) (贪心)
- Pytorch——用50行代码搭建ResNet
- python题目-青蛙跳井口
- Sentaurus入门(3):sde
- tf.nn.tanh 双曲正切曲线
- 关于egret引擎游戏开发的笔记-1
- win7 usb功能被禁用的解决方法
- 592. Fraction Addition and Subtraction
- MLC转成SLC模式没有想象的那么好
- 中产学院全国首创7大黄金技术桂林游学发布会
- Python根据字幕文件自动给视频添加字幕(通用版)
热门文章
- python数字编码_Python 编码为什么那么蛋疼?
- python enumerate用法_【Python】python enumerate用法总结
- 两个服务器之间怎么传输大量数据速度快 java socket_一口气说出Kafka为啥这么快?...
- web自动化如何在不同浏览器运行_Web自动化测试:元素的基础操作和浏览器基础操作...
- matlab优化工具箱
- 2017年10月08日普及组 蜡烛
- python画图标题为蓝色_python绘制语谱图怎么设置成黄蓝色
- protobuf message定义_巧用 Protobuf 反射来优化代码,拒做 PB Boy
- php结尾的链接_优化 PHP 代码建议(结尾有彩蛋)
- oss上传文件不能在浏览器直接打开_OSS使用Bucket域名访问直接下载不能打开网页的解决方法...