关于C/C++中typedef为一个类型(包括结构体类型)同时定义多个别名、定义指针类型别名的语法

ops/2024/12/14 17:12:30/

C/C++中可以用关键词typedef为一个类型定义别名,而且可以一次定义多个别名哟,别名与别名之间用逗号分隔,并且一般别名和类型的指针类型也可以同时被定义哟。

目录

  • 示例1-为int类型定义三个别名
  • 示例2-为int类型同时定义一般别名和指针类型别名
  • 示例3-为结构体类型定义三个别名
  • 示例4-为结构体类型定义两个一般别名和一个指针别名

示例1-为int类型定义三个别名

typedef int a1, a2, a3;

有了这个定义,那么有下面的用法

a1 x = 5;  // 等价于 int x = 5;
a2 y = 10; // 等价于 int y = 10;
a3 z = 15; // 等价于 int z = 15;

示例2-为int类型同时定义一般别名和指针类型别名

typedef int a1, a2, a3, *b1;

这段代码使用了 typedef,它的作用是为类型创建别名。这条语句的解析如下:

typedef int a1, a2, a3, *b1;

解析

  1. typedef int a1;

    • 定义了 a1int 类型的别名。
  2. typedef int a2;

    • 定义了 a2int 类型的别名。
  3. typedef int a3;

    • 定义了 a3int 类型的别名。
  4. typedef int *b1;

    • 定义了 b1int*(指向 int 类型的指针)的别名。

使用示例
定义变量时:

a1 x = 10;    // 等价于 int x = 10;
a2 y = 20;    // 等价于 int y = 20;
a3 z = 30;    // 等价于 int z = 30;b1 pointer1 = &x;  // 等价于 int *pointer1 = &x;

总结
这句代码的作用是:

  • int 类型定义了三个一般别名:a1a2a3
  • int*(指针类型)定义了一个别名:b1

示例3-为结构体类型定义三个别名

typedef struct Region {int iLeftUpX;int iLeftUpY;int iWidth;int iHeigh;
} Zone, Area, Range;

这段代码为结构体类型struct Region定义了三个别名,分别为Zone、Area、Range。
有了这些定义,那么有:

Zone z = {0, 0, 100, 200};   // 定义一个 Zone 类型的变量
Area a = {10, 20, 300, 400}; // 定义一个 Area 类型的变量
Range r = {5, 5, 50, 50};    // 定义一个 Range 类型的变量

等效于:

struct Region z = {0, 0, 100, 200};
struct Region a = {10, 20, 300, 400};
struct Region r = {5, 5, 50, 50};

示例4-为结构体类型定义两个一般别名和一个指针别名

typedef struct Region {int iLeftUpX;int iLeftUpY;int iWidth;int iHeigh;
} Zone, Area, Range, *district;

Zone 是 struct Region 类型的别名。
Area 是 struct Region 类型的别名。
Range 是 struct Region 类型的别名。

*district:这个部分定义了一个指向 struct Region 类型的指针类型别名 district。它表示:district 是指向 struct Region 类型的指针类型。

用法:

Zone z1 = {0, 0, 100, 200};   // 使用 Zone 定义 struct Region 类型的变量
Area a1 = {10, 10, 150, 250}; // 使用 Area 定义 struct Region 类型的变量
Range r1 = {20, 20, 200, 300}; // 使用 Range 定义 struct Region 类型的变量district p = &z1;  // 使用 district 定义一个指向 struct Region 的指针

http://www.ppmy.cn/ops/141865.html

相关文章

离开wordpress

wordpress确实挺好用的 插件丰富 主题众多 收费的插件也很多 国内的做主题的也挺好 但是服务器跑起来各种麻烦伤脑筋 需要花在维护的时间太多了 如果你的网站持续盈利 你就会更担心访问质量访问速度 而乱七八糟的爬虫黑客 让你的服务器不堪重负 突然有一天看到了静态站…

力扣9. 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而…

python编程Day13-异常介绍捕获异常抛出异常

异常 介绍 1, 程序在运行时, 如果Python解释器遇到到一个错误, 则会停 止程序的执行, 并且提示一些错误信息, 这就是异常. 2, 程序停止执行并且提示错误信息这个动作, 通常称之为: 抛出 (raise) 异常 # f open(aaaa.txt) # FileNotFoundError: [Errno 2] No such file or dire…

计网_虚拟局域网VLAN

2024.12.08:计算机网络虚拟局域网VLAN学习笔记 虚拟局域网VLAN VLAN背景(认真看)VLAN定义(最大的好处是隔离广播域)VLAN以太网帧格式的扩展 VLAN背景(认真看) 以太网使用的是广播信道&#xff0…

取消网络请求

1. 使用 fetch 的取消请求 fetch 使用 AbortController 提供取消请求的功能。 示例代码 let currentController null;function fetchWithCancel(url) {// 如果有上一个请求,则取消它if (currentController) {currentController.abort();}// 创建新的 AbortContr…

【vue2】el-select,虚拟滚动(vue-virtual-scroller)

需求背景​​​​​​ vue2+element-ui项目中,当el-select中数据量较大时(超出5000个dom节点),会导致页面加载和渲染卡顿、el-select下拉列表延迟展开。 在现在的el-select的基础上使用分页或者虚拟列表的形式去处理大量的下拉菜单,可以保证页面的正常渲染及el-select的…

全局搜索正则表达式(grep)

一.grep简介 grep 全程Globally search a Regular Expression and Print,是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep和egrep 二.grep的工作…

SeaTunnel Web1.0.0安装

部署seatunnel2.3.8参考:部署seatunnel2.3.8-CSDN博客 SeaTunnel Web1.0.1对应的seatunnel2.3.3版本,所以如果要想在SeaTunnel Web1.0.1上能正常跑seatunnel对应版本包,在seatunnel上传的connector-开头的包,都得跟着SeaTunnel Web依赖的版本走,如安装了seatunnel2.3.7但…