用typedef定义类型

除了可以直接使用C提供的标准类型名(如int、char、float 、double、long 等)和自己声明的结构体、共用体、指针、枚举类型外,还可以用typedef声明新的类型名来代替已有的类型名。如:

typedef int INTEGER;

typedef float REAL;

指定用 INTEGER 代表int类型,REAL 代表float。这样,以下两行等价:

① int i,j; float a,b;

② INTEGER i,j; REAL a,b;

这样可以使熟悉 FORTRAN的人能用INTEGER和 REAL定义变量,以适应他们的习惯。

如果在一个程序中,一个整型变量用来计数,可以:

typedef int COUNT;

COUNT i,j;

即将变量i、j定义为COUNT 类型,而COUNT等价于int,因此i、j是整型。在程序中将i、j定为COUNT 类型,可以使人更一目了然地知道它们是用于计数的。

可以声明结构体类型:

typedef struct

{int month ;

int day:

int year;

}DATE;

声明新类型名DATE,它代表上面指定的一个结构体类型。这时就可以用DATE定

义变量:

DATE birthday; (不要写成struct DATE birthday;)

DATE*P; (p为指向此结构体类型数据的指针)

还可以进一步:

①typedefintNUM[100]; (声明NUM为整型数组类型)

NUM n; (定义n为整型数组变量)

②typedef char*STRING; (声明STRING为字符指针类型)

STRING p,s[10]; (p为字符指针变量s为指针数组)

③typedef int(*POINTER)O) (声明POINTER为指向函数的指针类型,该函数返回整型值) POINTER p1,p2; (p1、p2 为POINTER类型的指针变量)

归纳起来,声明一个新的类型名的方法是:

①先按定义变量的方法写出定义体(如:inti;)。

②将变量名换成新类型名(如:将i换成COUNT)。

③在最前面加typedef(如:typedef int COUNT)。

④然后可以用新类型名去定义变量。

再以定义上述的数组类型为例来说明:

①先按定义数组变量形式书写:int n[100];

②将变量名n换成自己指定的类型名:int NUM[100];

③在前面加上typedef,得到typedef int NUM[100];

④用来定义变量:NUM n;

同样,对字符指针类型,也是:①char* p;②char * STRING;③typedef *  STRING;

④STRING p,s[10];

习惯上常把用typedef声明的类型名用大写字母表示,以便与系统提供的标准类型标识符相区别。

说明:

  1. 用typedef可以声明各种类型名,但不能用来定义变量。用typedef可以声明数组类型、字符串类型,使用比较方便。如定义数组,原来是用

int a[10],b[10],c[10],d[10];

由于都是一维数组,大小也相同,可以先将此数组类型声明为一个名字:

typedef int ARR[10];

然后用ARR去定义数组变量:

ARR a,b,c,d;

ARR 为数组类型,它包含10个元素。因此,a、b、c、d都被定义为一维数组,含10个元素。

可以看到,用typedef可以将数组类型和数组变量分离开来,利用数组类型可以定义多个数组变量。同样可以定义字符串类型、指针类型等。

(2)用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型.例如,前面声明的整型类型COUNT,它无非是对int型另给一个新名字。又如:

typedef int NUM[10];

无非是把原来用“intn[10];”定义的数组变量的类型用一个新的名字NUM表示出来,无论用哪种方式定义变量,效果都是一样的。

  1. typedef 与 #define有相似之处,如:

typedef int COUNT;

和 #defeCOUNT int

的作用都是用COUNT 代表int.但事实上,它们二者是不同的。#define是在预编译时处理的,它只能作简单的字符串替换,而typedef是在编译时处理的。实际上它并不是作简单的字符串替换,例如:

typedef int NUM[10];

并不是用“NUM[10]”去代替“int”,而是采用如同定义变量的方法那样来声明一个类型(就是前面介绍过的将原来的变量名换成类型名)。

(4)当不同源文件中用到同一类型数据(尤其是像数组、指针、结构体、共用体等类型数据)时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。

(5)使用typedef有利于程序的通用与移植。有时程序会依赖于硬件特性,用typedef便于移植。例如,有的计算机系统int型数据用两个字节,数值范围为一32768~32767,而另外一些机器则以4个字节存放一个整数,数值范围为士21亿。如果把一个C程序从一个以4个字节存放整数的计算机系统移植到以2个字节存放整数的系统,按一般办法需要将定义变量中的每个int改为long。例如,将“int a,b,c;”改为“long a,b,c;",如果程序中有多处用int定义变量,则要改动多处。现可以用一个INTEGER来声明int:

typedef int INTEGER;

在程序中所有整型变量都用INTEGER定义。在移植时只需改动typedef定义体即可:

typedef long INTEGER;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tuxera for Mac2024软件产品密钥及下载安装教程

Tuxera for Mac在安全性和稳定性方面表现出色,为用户提供了可靠的数据保障和无忧的使用体验。 首先,从安全性角度来看,Tuxera for Mac采用了先进的技术来保护用户的数据。它支持快速全面的数据保护,通过智能缓存技术确保文件传输…

Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null+工程化范例

文章目录 前言GodotProjectDir is null解决方法解决警告问题根本解决代码问题测试引用其实其它库的输出路径无所谓。 工程化范例环境命名规范Nuget项目结构架构代码ISceneModelIOC服务 测试GD_Extension 通用扩展TestUtils GD_ProgramTestServiceMainSceneModel Godot对应的脚本…

蓝桥杯单片机快速开发笔记——特训7 实时时钟的暂停启动与修改

一、原理分析 DS1302实时时钟:http://t.csdnimg.cn/JnDl7 HC573/HC138:http://t.csdnimg.cn/W0a0U 数码管:http://t.csdnimg.cn/kfm9Y 独立键盘:http://t.csdnimg.cn/YPInc 二、示例题目 在CT107D单片机综合训练平台上新建工程&a…

STM32存储左右互搏 SPI总线FATS文件读写SD/MicroSD/TF卡

STM32存储左右互搏 SPI总线FATS文件读写SD/MicroSD/TF卡 SD/MicroSD/TF卡是基于FLASH的一种常见非易失存储单元,由接口协议电路和FLASH构成。市面上由不同尺寸和不同容量的卡,手机领域用的TF卡实际就是MicroSD卡,尺寸比SD卡小,而…

Leo赠书活动-21期 《一篇讲明白 Hadoop 生态的三大部件》

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…

【算法刷题】链表笔试题解析(1)

一、链表分割 题目描述: 链接:链表分割 题目分析: 这题直接处理并不好做,我们可以构建前后两个链表,将小于x值的结点放在链表a内,将其它结点放在链表b内,这样将原链表遍历完后,原链…

Day23 代码随想录(1刷) 二叉树

669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代…

PHP图床程序优化版:图片外链服务、图床API服务、图片CDN加速与破解防盗链

图片免费上传 支持本地储存、FTP储存、第三方云储存(阿里云 OSS、腾讯云 COS、七牛云等)。 图片外链加速 一键转换第三方网站的图片外链地址为图床可分享的图片地址(支持CDN)。 图片解析服务 直接将第三方外链图片地址显示为…

oracle docker安装

修改下载的Image的REPOSITORY和TAG属性 修改下载的Image的REPOSITORY和TAG属性&#xff1a;docker tag <IMAGE ID> <REPOSITORY NAME> docker tag 3fa112fd3642 aliyun/oracle_11g 参考网址 使用docker images时&#xff0c;可能会出现REPOSITORY和TAG均为none的镜…

【教程】iOS 手机抓包工具介绍及教程

&#x1f4f1; 最近又发现APP Store一款宝藏软件&#xff0c;克魔助手抓包工具&#xff0c;app刚上架&#xff0c;功能不断迭代中&#xff0c;目前18软妹币实惠价可享受终身版&#xff01;现在是下手的最好时机。 引言 移动端开发中&#xff0c;抓包工具已成为必备的工具之一…

shell脚本发布nginx vue2 项目示例

nginx、git、node.js安装略过。 使git pull或者git push不需要输入密码操作方法 非docker安装nginx&#xff01;&#xff01;&#xff01; 姊妹篇&#xff08;docker安装nginx&#xff09;&#xff1a;shell脚本发布docker-nginx vue2 项目示例 pro_build.sh 注意&#xff1…

Linux基础IO(操作系统层面理解文件)

目录 一、认识 open 函数 1.1 理解文件 1.2 open 函数 1.3 函数选项和宏 二、 open 函数的返回值 三、 fd 的本质 3.1 各部分内容及关系 3.2 如何确定进程对应文件 四、Linux 一切皆文件&#xff1f; 一、认识 open 函数 在C语言中学习文件操作时&#xff0c;我们学…

【OceanBase】V3.1.5 版本备份恢复

日志备份 启动日志归档 ALTER SYSTEM ARCHIVELOG;查看日志归档状态 SELECT * FROM CDB_OB_BACKUP_ARCHIVELOG;停止日志归档 ALTER SYSTEM NOARCHIVELOG;数据备份 发起转储 -- 发起转储 ALTER SYSTEM MAJOR FREEZE;-- 查看转储进度 SELECT * FROM oceanbase.__all_zone WH…

基于SpringBoot和Vue的课程作业管理系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的课程作业管理系统的设计与实现。 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&am…

element表格 加滚动,监听底部实现分页加载

表格要实现滚动很简单&#xff0c;给他加一个高度即可 height"300" 然后是监听事件 mounted() {this.lazyLoading();}, methods:{lazyLoading(){let dom document.querySelector(".el-table__body-wrapper");dom.addEventListener("scroll", (…

踩坑uniapp中打包Andiord app,在真机调试时地图以及定位功能可以正常使用,打包成app后失效的问题

首先看到这是uni官网提出的&#xff0c;app上建议使用高德地图。 下面就用高德地图进行配置。 步骤一&#xff1a;登陆高德地图控制台 名称和类型根据自己情况填写选择即可 步骤二&#xff1a; 添加key 步骤三&#xff1a;取到SHA1 进入uniapp开发官网 点击应用名称&#…

算法模型离线评估方案

1 引言2需求背景3特征评估 3.1特征表维护3.2样本频率分布直方图概览3.3Pearson相关系数计算3.4缺失率计算4模型评估 4.1模型离线AUC评估 4.1.1什么是AUC4.1.2AUC的优势:4.2TensorBoard可视化 4.2.1项目中集成tensorboard4.2.2启动tensorboard命令4.2.3可视化效果4.3离线实验记录…

SpringBoot SpringMVC (详解)

6. SpringBoot Spring 的诞⽣是为了简化 Java 程序的开发的&#xff0c;⽽ Spring Boot 是为了快速开发 Spring 程序开发而诞生的。 Spring Boot 的优点&#xff1a; 快速集成框架&#xff0c;Spring Boot 提供了启动添加依赖的功能&#xff0c;⽤于秒级集成各种框架。内置运⾏…

钓鱼_精准定位GPS

目录 一、Seeker (一) 简介 二、实验环境 三、实验操作 (一) 下载安装 (二) 运行和使用 (三) 隧道代理 1. 登录平台 2. 下载代理客户端 3. 使用代理客户端

力扣练习 3.27

121. 买卖股票的最佳时机 贪婪思想&#xff1a;力争在最低成本买入&#xff0c;最高利润卖出。 [7,1,5,3,6,4] 可以先假设在第一天买入和卖出&#xff0c;这时最低成本是7&#xff0c;最大利润是7-70 然后假设在第二天买入和卖出&#xff0c;成本就是1&#xff0c;利润也是0 第…