首页 > 其他分享 >CPP知识 typedef

CPP知识 typedef

时间:2024-06-21 16:56:10浏览次数:24  
标签:typedef 20 int 知识 char 类型 CPP PTR

typedef本身是type define(类型定义)的缩写。
typedef为c语言的关键字,作用是为一种数据类型(基本类型或自定义数据类型)定义一个
新名字,不能创建新类型。
与define不同,typedef仅限于数据类型,而不是表达式或具体的值。
define发生在预处理,typedef发生在编译阶段。

点击查看代码
struct studentsInfoList
{
	char name[20];
	char sex;
};
typedef struct studentsInfoList sinfo;

int main()
{
	sinfo s1;
	return 0;
}
第二个例子
点击查看代码
#include<iostream>
typedef char* PCHAR;
int main()
{
	//char* p1, p2;
	PCHAR p1, p2;
	
	std::cout << typeid(p1).name() << std::endl;
	std::cout << typeid(p2).name() << std::endl;
	typedef char ARRAY20[20];
	return 0;
}
允许为一个数据类型起一个新的别名,就像给人起"绰号"一样。起别名的目的不是为了提高程序运行效率,而是为了编码方便。 例如有一个结构体的名字是stu,要想定义一个结构体变量就得这样写:

struct stu stu1;

这种写法更加简练,意义也非常明确,不管在标准头文件中还是以后的编程实践中,都会大量使用这种别名。
使用关键字typedef可以为类型起一个新的别名。typedef的用法一般为:

tpedef oldName newName;

oldName是类型原来的名字,newName是类型新的名字。例如:

点击查看代码
	typedef int INTEGER;
	INTEGER a, b;
	a = 1;
	b = 2;
typedef还可以给数组、指针、结构体等类型定义别名。先来看一个给数组类型定义别名的例子:

typedef char ARRAY20[20];

它等价于:
char a1[20], a2[20], s1[20], s2[20];
注意,数组也是有类型的。例如 char a1[20];定义了一个数组a1,它的类型就是char[20]中讲解过。又如,为结构体类型定义别名:

点击查看代码
typedef struct stu {
	char name[20];
	int age;
	char sex;
}STU;
STU是struct stu的别名,可以用STU定义结构体变量:

STU body1, body2;

它等价于:

struct stu body1, body2;

再如,为指针类型定义别名:

typedef int(*PTR_TO_ARR)[4];

表示PTR_TO_ARR是类型int *[4]的别名,它是一个二维数组指针类型。接着可以使用PTR_TO_ARR定义二维数组指针:

PTR_TO_ARR p1, p2;

按照类似的写法,还可以为函数指针类型定义别名:

点击查看代码
typedef int (*PTR_TO_FUNC)(int, int);
PTR_TO_FUNC ptfunc;

typedef和 #define的区别

typedef在表现上有时候类似于#define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把typedef看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。
1.可以使用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能这样做。如下所示:

点击查看代码
# define INTEGE int
unsigned INTEGE n;//没问题

typedef int INTERGE;
unsigned INTERGE N;//错误,不能在INTERGE前面添加unsigned

2.在连续定义几个变量的时候,typedef能够保证定义的所有变量均为同一类型,而#define则无法保证。例如:

点击查看代码
#define PTR_INT int *; 
PTR_INT p1, p2;

经过宏替换以后,第二行变为:

int* p1, p2;

这使得p1、p2成为不同的类型:p1是指向int类型的指针,p2是int类型。相反,在下面的代码中:

点击查看代码
typedef int* PTR_INTEGER;
PTR_INTEGER p1, p2;

p1、p2 类型相同,它们都是指向 int 类型的指针。

标签:typedef,20,int,知识,char,类型,CPP,PTR
From: https://www.cnblogs.com/SunshineWeather/p/18260874

相关文章

  • 基于大语言模型LangChain框架:知识库问答系统实践
    ChatGPT所取得的巨大成功,使得越来越多的开发者希望利用OpenAI提供的API或私有化模型开发基于大语言模型的应用程序。然而,即使大语言模型的调用相对简单,仍需要完成大量的定制开发工作,包括API集成、交互逻辑、数据存储等。为了解决这个问题,从2022年开始,多家机构和......
  • 软件测试相关知识点
    什么是软件测试?定义:软件质量保证的一种手段目的:发现错误以及避免这些错误的发生,使产品达到完美概念:是软件工程中的一个非常重要的环节,是开发项目整体的一部分。是有计划有组织的,是伴随软件工程的诞生而诞生的,软件测试不是万能的,不可能发现全部缺陷,软件测试是有局限性的。......
  • 五天搞定Mysql基础知识-Day05
    学习目标:        1、MySQL常用内置函数        2、了解存储过程        3、了解视图        4、了解事务        5、了解索引        6、掌握基于命令行的SQL使用第一章MySQL内置函数一、字符串函数1、拼接字符串......
  • Linux-基础知识Day01
    Linux基础一、目录的概念:        1、在Linux系统中,顶级目录是"/"        2、在Linux系统中,文件路描述:"/usr/local/hello.txt"        3、在Linux系统中,出现在开头的/表示:根目录;出现在后面的/表示:层次关系二、Linux命令的基础:1、概念:无论是什么......
  • 【C语言初学指导】进阶知识 指针、数组与字符串
    指针指针是一种特殊的变量,它存储的是另一个变量的内存地址,而不是数据值本身。这个地址指向了内存中的一个特定位置,程序可以通过这个地址来访问或修改存储在该位置的数据。举个例子:intvar=10;//假设var住在内存里的101号房间int*ptr=&var;//ptr就是我们......
  • [Mysql] 的基础知识和sql 语句.教你速成(上)——逻辑清晰,涵盖完整
    目录前言上篇的内容概况下篇的内容概况 数据库的分类关系型数据库常见的关系型数据库系统非关系型数据库1.键值对数据库(Key-ValueStores)特点:常见的键值对数据库:2.文档数据库(DocumentStores)特点:常见的文档数据库:3.列族数据库(Column-FamilyStores)特点:常......
  • 【学习笔记】爱立信SPO 1400 CRAFT软件基础知识3——图形用户界面之管理树
    一、前期准备提示:下面所有学习内容都是基于以下条件完成的条件1.已经正确安装并正常运行SPO1400CRAFT软件(以下简称LCT)条件2.确认已正确使用爱立信SPO1400CRAFT软件通过网络登录设备(以下简称NE)具体登录教程参考:使用爱立信SPO1400CRAFT软件通过网络登录设备的详细......
  • MySQL进阶知识之存储过程、函数、流程控制、索引
    【一】MySQL进阶知识之存储过程【1】什么是存储过程存储过程就类似于Python中的自定义函数内部包含了一系列可以执行的SQL语句,存储过程存储在MySQL服务端中,可以通过调用存储过程触发内部的SQL语句存储过程是在关系型数据库中存储的一组预定义的SQL语句集合,可以接收参数并返回......
  • MySQL进阶知识之视图、触发器、事务
    【一】MySQL进阶知识之视图【1】视图介绍(1)什么是视图视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接使用视图也是一张表在计算机科学中,视图(View)是一种虚拟表,其内容是一个或多个基本表的查询结果。视图基于数据库中的数据,通过定义查询语句来构建,并在需要时动......
  • CANFD知识点整理
    CAN知识点整理概述CANFD提出引入CAN总线的数十年中,汽车嵌入式系统的结构发生了深远的变化,最明显的变化是数量:如果在引入CAN时只需传输数百个信号,那么今天这个数字已达到五位数。数据流量的增加导致CAN总线上的总线负载率越来越高。除了对带宽的需求在不断增加,对确定性系统行为......