C语言--typedef的使用


 前言

在C语言中使用结构体时必须加上struct这个关键字,那有没有办法省略这个呢?要想达到这个目的就 需要用到关键字typedef,顾名思义”类型定义”。 typedef 数据类型 新的别名; 它是用来操作数据类型。其主要作用有两个: 1.给一个较长较复杂的类型取一个简单的别名。 2.给类型取一个和问题相关的别名。 这两种情况在生活中都非常常见,例如第1种情况,中华人民共和国简称中国,第2种情况,你的同学非常 的漂亮给她起个外号叫”大美丽”。 第一种情况的使用如下:

int main()
{typedef unsigned long long int uint64;//给无符号长长整型取别名叫uint64//取一个别名  u代表无符号  int代表整形  64代表64位unsigned long long int a = 10;  //定义一个无符号长长整型uint64 b = 20;   //定义一个无符号长长整型return 0;
}

 上面的代码给unsigned long long int数据类型取了一个简单的别名uint64,其中u表示符号,int表示 整数,64表示64位。

typedef unsigned long long int uint64;//给无符号长长整型取别名叫uint64
typedef int* Pint;//给整型指针int * 取别名叫Pint
typedef int Arr[10];//这是什么呢?
typedef int (*Pfun)(int, int);//这是什么呢?
int main()
{int a = 10;Pint p = &a;printf("%d\n", sizeof(Arr));return 0;
}

 第2行代码给int*类型取了一个别名Pint,在第8行Pint定义的变量就是int*这种数据类型了。 对于比较复杂的类型如3,4行就不容易理解了。那怎么办呢?关键是牢记typedef是用来定义数据类型 的。 对于复杂的类型可以先把typedef去掉,看看是定义一个什么类型的变量,然后加上typedef它就由这种 类型的变量提升为这种数据类型。

 利用typedef定义的新类型使用如下:

typedef int* Pint;//给整型指针int * 取别名叫Pint
typedef int Arr[10];//Arr为整数数组类型
typedef int (*Pfun)(int, int);//Pfun为函数指针类型
int Max(int a, int b)
{return a > b ? a : b;
}
int main()
{int a = 10;Pint p = &a; //p为指针变量Arr arr = { 1,2,3,4,5,6,7,8,9,10 };//arr为数组Pfun pf = Max;//pf为函数指针变量printf("%d\n", pf(10, 20));return 0;
}

 第13行,Pint为整型指针类型,那么它定义的变量就是整型指针变量。 第15行,Arr为整型数组类型,那么它定义的变量就是整型数组变量。 第17行,Pfun为函数指针类型,那么它定义的变量就是函数指针变量。 typedef的第二种情况: 给类型取一个和问题相关的别名。这种方式最典型的应用是size_t和time_t这 两种类型。size_t应用在计数方面,time_t应用在时间方面。在visual studio2022中这两者的定义如下:

回到本节提到的问题,如何在使用结构体时省略struct这个关键字呢?可以按照如下方法定义结构体。 例如:

//第一个方式
struct A
{int a;char b;
};
typedef struct A A;//给struct A起个别名叫A
//第二种方式
typedef struct B
{char a;int b;
}B; //给struct B起个别名叫B
int main()
{A aa = { 10,'x' }; //直接使用AB bb = { 'y',20 }; //直接使用Breturn 0;

创作不易, 如果这份博客👍对你有帮助,可以给博主一个免费的点赞以示鼓励。

欢迎各位帅哥美女点赞👍评论⭐️收藏⭐️,谢谢!!!

如果有什么疑问或不同的见解,欢迎在评论区留言哦👀。

祝各位生活愉快⭐️

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

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

相关文章

MySQL数据库入门到大牛_03_SQL概述、基本的SELECT语句、显示表结构、过滤数据

文章目录 1. SQL概述1.1 SQL背景知识1.2 SQL语言排行榜1.3 SQL 分类1.4 数据库内容 2. SQL语言的规则与规范2.1 基本规则2.2 SQL大小写规范 (建议遵守)2.3 注 释2.4 命名规则(暂时了解)2.5 数据导入指令2.5.1 source 文件全路径名…

零代码编程:用ChatGPT批量将Mp4视频转为Mp3音频

文件夹中有很多mp4视频文件,如何利用ChatGPT来全部转换为mp3音频呢? 在ChatGPT中输入提示词: 你是一个Python编程专家,要完成一个批量将Mp4视频转为Mp3音频的任务,具体步骤如下: 打开文件夹:…

Springboot中解析JSON字符串(jackson库ObjectMapper解析JSON字符串)

1、ObjectMapper与JSONObject比较 1、ObjectMapper属于jackson库的一部分,JSONObject属于alibaba的fastjson,两者各有优劣,可根据自己的系统环境选择使用哪种技术。 2、目前来看,Jackson社区相对活跃,Spring MVC和Spring Boot都…

Spring中@Bean标注的方法是如何创建对象呢?

Bean 标注的方法如何创建对象呢? 参考文章:https://blog.csdn.net/qq_35971258/article/details/128241353 下边只讲一下 Bean 注解标注的方法,是如何去进行创建 bean,以及流程是怎样的,如果需要看源码具体执行流程&a…

Godot Best practices

Get Forward Vector transform.x # 等价手算 var rad node.rotation var forward Vector2(cos(rad), sin(rad))Await and Unity Style Coroutine func coroutine(on_update: Callable, duration: float 1):var elapse_time 0while elapse_time < 1:elapse_time get_p…

RabbitMQ常用命令(一)

启动和关闭 1、启动RabbitMQ rabbitmq-server start & 注意&#xff1a;这里可能会出现错误&#xff0c;错误原因是/var/lib/rabbitmq/.erlang.cookie文件权限不够。 解决方案对这个文件授权 chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie chmod 400 /va…

IDEA项目下不显示target目录或者target目录不完整没有新添加的资源,idea隐藏target目录

文章目录 一、前言二、idea隐藏target目录2.1、idea隐藏target目录2.2、git提交时隐藏target目录 三、idea下显示target目录3.1、解决idea下不显示target目录问题3.2、target显示目录不完整 一、前言 在idea-2020.1.4版本下讲解idea怎么显示或隐藏target目录。 需要知道:如果…

3-爬虫-搜索文档树(find和find_all)、bs4其它用法、css选择器、selenium基本使用以及其他、selenium(无头浏览器、搜索标签)

1 搜索文档树 1.1 find和find_all 1.2 爬取美女图片 2 bs4其它用法 3 css选择器 4 selenium基本使用 4.1 模拟登录 5 selenium其它用法 5.1 无头浏览器 5.2 搜索标签 遍历文档树 -1 request 使用代理proxies {https: 192.168.1.12:8090,}-2 代理的使用-高匿 透明-免费---》…

聊一聊 tcp/ip 在.NET故障分析的重要性

一&#xff1a;背景 1. 讲故事 这段时间分析了几个和网络故障有关的.NET程序之后&#xff0c;真的越来越体会到计算机基础课的重要&#xff0c;比如 计算机网络 课&#xff0c;如果没有对 tcpip协议 的深刻理解&#xff0c;解决这些问题真的很难&#xff0c;因为你只能在高层…

线性代数之 伪逆矩阵

目录 一、伪逆矩阵 ◼ A的伪逆矩阵与SVD ◼ 用Python代码计算A的伪逆矩阵 ◼ 笔算A的伪逆矩阵 一、伪逆矩阵 ◼ A的伪逆矩阵与SVD 逆矩阵并不总是存在&#xff0c;即使是方阵。然而&#xff0c;对于非正方形矩阵&#xff0c;存在一个伪逆矩阵&#xff0c;也叫摩尔-彭罗斯…

SpringIoC之Bean生命周期源码主要流程解析

文章目录 生成BeanDefinition合并BeanDefinition加载类实例化前实例化 生成BeanDefinition Spring启动的时候会进行扫描&#xff0c;会先调用 org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#scanCandidateComponents(String basePacka…

OPCUA 行业配套标准:机器人

OPC UA 定义了对象&#xff0c;对象类型&#xff0c;结构化组织能力和定义对象之间关系的能力&#xff0c;利用这些基础和衍生类型及对象&#xff0c;用户还可以搭建出更复杂的类型&#xff0c;关系和对象。 如果不同的厂商或者用户定义的信息模型不同&#xff0c;将会影响系统…

qml添加滚动条

import QtQuick.Controls 2.15ScrollBar.vertical: ScrollBar {visible: flick1.contentHeight > flick1.heightanchors.right: parent.rightanchors.rightMargin: 40width: 10active: truecontentItem: Rectangle {radius: 6opacity: 0.5color: "#7882A0"} }

Linux 安装 Nginx 并配置为系统服务(超详细)

目录 前言安装 Nginx安装依赖项下载Nginx解压Nginx编译和安装防火墙设置启动Nginx 配置 Nginx 为系统服务配置 Nginx 服务文件启动 Nginx 服务设置开机自启动检查 Nginx 状态停止 Nginx 服务重启 Nginx 服务 卸载 Nginx结语 前言 Nginx是一款卓越的高性能Web服务器&#xff0c…

MySQL(11):数据处理之增删改

插入数据 方式1&#xff1a; 一条一条的添加数据 为表的所有字段按默认顺序插入数据 INSERT INTO 表名 VALUES (value1,value2,....);# 没有指明添加的字段 INSERT INTO emp1 VALUES (1,TOM,2023-11-06,3400);没有指明添加的字段&#xff0c;要按照声明顺序&#xff0c;进行…

docker搭建EMQX集群+nginx转发TCP

一、三台机器安装 1、三台都拉取镜像 docker pull emqx/emqx:5.0.262、三台分别运行镜像 第一台 docker run -itd --network host --name emqx --restart always \-p 1883:1883 \-p 18083:18083 \-p 8083:8083 \-p 8883:8883 \-p 8080:8080 \-e EMQX_NAME"master1"…

PyTorch 从tensor.grad 看 backward(权重参数) 和 gradient accumulated

1. 新建一个自变量 tensor x import torchx torch.ones(1, requires_gradTrue) print(x)1. 输出&#xff1a; tensor([1.], requires_gradTrue)2. 写一个 forward import torchx torch.ones(1, requires_gradTrue) y x**2 z x**33. y, z 都 backward import torchx to…

Voice Control for ChatGPT简单高效的与ChatGPT进行交流学习。

快捷又不失灵活性 日常生活中&#xff0c;我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的&#xff0c;毕竟相对于文字来说语音就不会显的那么的苍白无力&#xff0c;同时最大的好处就是能解放我们的双手吧&#xff0c;能更快实现两者间的对话&#xff0c;沟通便更高效…

排序算法的分析及实现

目录​​​​​​​ 1. 排序 1.1. 排序的概念 1.2. 排序的稳定性 1.3. 内部排序和外部排序 2. 直接插入排序 2.1. 直接插入排序 2.2. 直接插入排序的两种情况 1. 情况一 2. 情况二 2.3. 直接插入排序的单趟排序 2.4. 直接插入排序的完整实现 2.5. 直接插入排序的时…

如何手动获取spring/springboot中的IOC容器(全局上下文对象)?

IDE&#xff1a;IntelliJ IDEA 2022.2.3 x64 操作系统&#xff1a;win10 x64 位 家庭版 JDK: 1.8 文章目录 前言一、如何手动获取spring容器[ApplicationContext]&#xff1f;方式①&#xff1a;在启动类中获取spring容器方式②&#xff1a;自定义工具类实现ServletContextList…