17. typedef关键字的使用

一、为什么需要typedef关键字

  C 语言允许用户使用 typedef 来为一个数据类型起一个新的别名。一旦用户在程序中定义了别名,就可以在该程序中使用别名来定义变量的类型、数组的类型、指针变量的类型与函数的类型等。

  typedef 关键字定义的名称并不是真的创造了一种数据类型,而是给已有的或者复合型的以及复杂的数据类型取一个我们更容易理解识别的别名。

二、typedef关键字的使用

  使用关键字 typedef 可以为类型起一个新的别名。typedef 的用法一般为:

typedef oldName  newName;

  其中,oldName 是类型原来的名字,newName 是类型新的名字。

2.1、基本数据类型起别名

#include <stdio.h>typedef unsigned char uint8_t;   //无符号8位整数int main(void)
{uint8_t ch = 'a';printf("%c\n",ch);return 0;
}

  当我们使用 uint8_t 时,就和使用 unsigned char 是一样的。

2.2、数组类型起别名

#include <stdio.h>typedef int numbeArray10[10];int main(void)
{int i = 0;numbeArray10 array = {0,1,2,3};for(i = 0; i < 10; i++){printf("%d\n",array[i]);}return 0;
}

   其中 numberArray10 表示定义一个长度为 10 的整数数组。numberArray10 array 等价于 int array[10]。

2.3、指针数据类型起别名

#include <stdio.h>typedef char* pointer;int main(void)
{pointer p = "hello";printf("%s\n",p);return 0;
}

  我们定义了一个指针类型,当我们使用 pointer p 声明一个指针变量,就和使用 char *p 的含义是一样的。

2.4、结构体类型起别名

#include <stdio.h>struct Person
{char name[20];int age;
};typedef struct Person person;int main(void)
{person p = {"Sakura",10};printf("name: %s, age = %d\n",p.name,p.age);return 0;
}

  我们还可以在定义结构体时顺便使用 typedef 关键字定义结构体别名。

#include <stdio.h>typedef struct Person
{char name[20];int age;
}person;int main(void)
{person p = {"Sakura",10};printf("name: %s, age = %d\n",p.name,p.age);return 0;
}

  用 typedef 给结构体起别名的时候,可以省略结构体的类型名。

#include <stdio.h>typedef struct
{char *name;int age;
}Person;int main(void)
{Person p = {"Sakura",10};printf("name: %s, age = %d\n",p.name,p.age);return 0;
}

2.5、枚举类型起别名

#include <stdio.h>enum WEEK
{MONDAY = 1,THESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
};typedef enum WEEK Week;int main(void)
{Week week = WEDNESDAY;printf("%d\n",week);return 0;
}

 我们还可以在定义枚举类型时顺便使用 typedef 关键字定义枚举类型别名。

#include <stdio.h>typedef enum WEEK
{MONDAY = 1,THESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
}Week;int main(void)
{Week week = WEDNESDAY;printf("%d\n",week);return 0;
}

  用 typedef 给枚举类型起别名的时候,可以省略枚举的类型名。

#include <stdio.h>typedef enum
{MONDAY = 1,THESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
}Week;int main(void)
{Week week = WEDNESDAY;printf("%d\n",week);return 0;
}

2.6、函数指针起别名

#include <stdio.h>int max(int a, int b);int main(void)
{int num1 = 0,num2 = 0;int maxNum = 0;/*** 定义函数指针* func 是函数指针的别名* int 表示该函数指针指向的函数是返回int类型的* (int,int)表示该函数指针指向的函数形参是接收两个int* 在定义函数指针时,也可以写上形参名typedef int (*func)(int a,int b);* 对于函数来说,&函数名和函数名都是函数的地址*/typedef int (*func)(int,int);func pmax = &max;printf("请输入两个数,中间以空格分隔:\n");scanf("%d%d",&num1,&num2);/*** (*pmax)(num1,num2)通过函数指针去调用函数* 也可以这样调用pmax(num1,num2);*/maxNum = (*pmax)(num1,num2);printf("the max num is : %d\n",maxNum);return 0;
}int max(int a, int b)
{return a>b ? a : b;
}

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

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

相关文章

循序渐进丨MogDB 中 gs_dump 数据库导出工具源码概览

背景 gs_dump 是 MogDB 中一个功能丰富灵活的数据库导出工具&#xff0c;在数据库的维护、迁移和开发中经常使用。该工具允许用户根据需要导出整个数据库或者数据库中的特定对象&#xff0c;如模式&#xff08;schema&#xff09;、表&#xff08;tables&#xff09;、视图&am…

grafana version 11.1.0 设置Y轴刻度为1

grafana 版本 # /usr/share/grafana/bin/grafana --version grafana version 11.1.0设置轴 Axis 搜索 Standard options 在"Decimals"中输入0&#xff0c;确保只显示整数

Java基础12-特殊文件和日志技术

十二、特殊文件和日志技术 1、特殊文件 properties&#xff1a;用来存储键值对数据。 xml&#xff1a;用来存储有关系的数据。 1.1 properties文件 特点&#xff1a;存储键值对&#xff0c;键不能重复&#xff0c;文件后缀一般是.properties结尾的。 properties&#xff1a;是…

混合专家模型(MoE)中的容量因子f

在混合专家模型&#xff08;MoE&#xff09;中&#xff0c;容量因子f是一个重要的参数&#xff0c;它用于衡量MoE层中专家模型的容量和利用情况。具体来说&#xff0c;容量因子f通常定义为MoE层中实际激活的专家数量与MoE层中总专家数量的比例。 当容量因子f为1.25时&#xff…

自定义注解和组件扫描在Spring Boot中动态注册Bean(一)

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在Spring Boot中&#xff0c;自定义注解和组件扫描是两种强大的机制&#xff0c;它们允许开发者以声明性的方式动态注册Bean。这种方式不仅提高了代码的可读性和可维护性&#xff0c;还使得Spring Boot应用的…

UPDATE 更新数据

1.更新某一列字段的值 以 teacher 表为例&#xff0c;需要把前 3 条数据的 age 更新为 33&#xff0c;命令如下: UPDATE teacher SET age18,id_number44444444440604099X WHERE id 30;执行结果如下图 : 这里是对 age 字段列的前三条值进行数据的更新&#xff0c;注意更新…

网络安全有关法律法规

1. 前言 在当今数字化高速发展的时代&#xff0c;网络安全已成为关乎国家、企业和个人的重要议题。为了应对日益复杂的网络安全挑战&#xff0c;一系列网络安全法律法规应运而生&#xff0c;它们如同坚实的盾牌&#xff0c;守护着我们的数字世界。现在是2024年10月&#xff0c…

Unity学习日志-API

Untiy基本API 角度旋转自转相对于某一个轴 转多少度相对于某一个点转练习 角度 this.transform.rotation(四元数)界面上的xyz(相对于世界坐标) this.transform.eulerAngles;相对于父对象 this.transform.localEulerAngles;设置角度和设置位置一样&#xff0c;不能单独设置xz…

PHP对Json数据格式的理解

PHP 对 JSON&#xff08;JavaScript Object Notation&#xff09;数据格式的理解涉及将 JSON 数据解析为 PHP 变量&#xff08;通常是数组或对象&#xff09;&#xff0c;以及将 PHP 变量编码为 JSON 字符串。JSON 是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&…

EM算法学习

1.EM算法的介绍 可以发现&#xff1a;计算出θA和θB的值的前提是知道A、B币种的抛掷情况。 所以我们需要使用EM算法&#xff1a;求出每轮选择硬币种类的概率 2.EM算法执行过程&#xff1a; 第一步&#xff1a;首先初始化设置一组PA和PB证明的值。然后通过最大似然估计得到每…

MOE论文详解(3)-Switch Transformers

Switch Transformers也是google在2022年发表的一篇论文, 该论文简化了MoE的路由算法, 减少了计算量和通信量; 第一次支持bfloat16精度进行训练. 基于T5-Base和T5-Large设计的模型在相同的算力下训练速度提升了7x倍; 同时发布了1.6万亿(1.6 trillion)参数的MoE模型&#xff0c;相…

Linux系统:Ubuntu上安装Chrome浏览器

Ubuntu系统版本&#xff1a;23.04 在Ubuntu系统上安装Google Chrome浏览器&#xff0c;可以通过以下步骤进行&#xff1a; 终端输入以下命令&#xff0c;先更新软件源&#xff1a; sudo apt update 或 sudo apt upgrade终端输入以下命令&#xff0c;下载最新的Google Chrome .…

多机编队—(3)Fast_planner无人机模型替换为Turtlebot3模型实现无地图的轨迹规划

文章目录 前言一、模型替换二、Riz可视化三、坐标变换四、轨迹规划最后 前言 前段时间已经成功将Fast_planner配置到ubuntu机器人中&#xff0c;这段时间将Fast_planner中的无人机模型替换为了Turtlebot3_waffle模型&#xff0c;机器人识别到环境中的三维障碍物信息&#xff0…

5 首页框架及路由配置

1 添加首页LayoutVue.vue组件&#xff0c;登录成功之后跳转到该组件 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from element-plus/icons-vue import avatar from /assets/default.png// 导入ref import {…

Selenium 模拟快捷键来进行粘贴操作

Selenium 可以模拟快捷键来进行粘贴操作。在 Selenium 中&#xff0c;使用 send_keys 方法可以模拟键盘输入&#xff0c;包括常见的快捷键操作。对于粘贴操作&#xff0c;可以使用 Keys.CONTROL v&#xff08;在 Windows 和 Linux 上&#xff09;或 Keys.COMMAND v&#xff0…

GitLab 老旧版本如何升级?

极狐GitLab 正式对外推出 GitLab 专业升级服务 https://dl.gitlab.cn/cm33bsfv&#xff01; 专业的技术人员为您的 GitLab 老旧版本实例进行专业升级&#xff01;服务详情可以在官网查看详细解读&#xff01; 那些因为老旧版本而被攻击的例子 话不多说&#xff0c;直接上图&a…

RTMP、FFmpeg安装测试

RTMP、FFmpeg安装测试 1.使用 Docker 部署 RTMP 服务1.拉取带有 RTMP 模块的 NGINX 镜像&#xff1a;2.运行容器 2. 防火墙放行3.windows安装ffmpeg1. [下载链接](https://ffmpeg.org//download.html)2.解压3.环境变量配置 4.常用的 FFmpeg 推流和拉流命令1.推流命令1. 推流到 …

SQL实现给表添加数据及其触发器操作

新建一个表实现添加数据&#xff0c;数据不重复&#xff0c;。判断两个字段是否存在&#xff0c;如果存在&#xff0c;就修改对应字段&#xff0c;如果不存在就新增数据。 测试表格Test如下&#xff1a; 新建触发器如图&#xff1a; 触发程式如下&#xff1a; USE [Test] GO/*…

C语言_字符串+内存函数的介绍

字符函数和字符串函数 本章重点 重点介绍处理字符和字符串的库函数的使用和注意事项 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 字符串查找 strstr strtok 错误信息报告 strerror 字符操作内存操作函数 memcpy memmove memset memcmp 1. 字…

【含文档】基于Springboot+Vue的白云山景点门票销售管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…