C语言自定义类型

在C语言中,自定义类型可以通过typedef关键字来实现。typedef用于为现有的数据类型创建新的名称(别名),使代码更清晰易读。自定义类型的一个常见用途是简化复杂的类型声明,特别是在使用结构体、枚举和函数指针时。

使用typedef定义基本类型的别名

#include <stdio.h>
​
typedef unsigned long ulong;
typedef unsigned char byte;
​
int main() {ulong big_number = 123456789UL;byte small_number = 255;
​printf("Big number: %lu\n", big_number);printf("Small number: %u\n", small_number);
​return 0;
}

使用typedef定义结构体类型的别名

结构体在C语言中经常使用,typedef可以简化结构体的使用。

#include <stdio.h>
​
// 使用typedef定义结构体别名
typedef struct {int x;int y;
} Point;
​
int main() {// 使用结构体别名声明变量Point p1 = {10, 20};Point p2 = {30, 40};
​printf("Point p1: (%d, %d)\n", p1.x, p1.y);printf("Point p2: (%d, %d)\n", p2.x, p2.y);
​return 0;
}

使用typedef定义枚举类型的别名

枚举类型用于定义一组命名的整数常量,使用typedef可以简化枚举类型的声明和使用。

#include <stdio.h>
​
// 使用typedef定义枚举类型别名
typedef enum {RED,GREEN,BLUE
} Color;
​
int main() {// 使用枚举类型别名声明变量Color favorite_color = BLUE;
​if (favorite_color == BLUE) {printf("Favorite color is blue.\n");}
​return 0;
}

使用typedef定义函数指针类型的别名

函数指针在某些高级编程中非常有用,但其声明和使用较为复杂,使用typedef可以简化函数指针的使用。

#include <stdio.h>
​
// 定义一个函数指针类型别名
typedef void (*FuncPtr)(int);
​
// 定义一个符合函数指针类型的函数
void print_number(int n) {printf("Number: %d\n", n);
}
​
int main() {// 声明一个函数指针变量FuncPtr fp = print_number;
​// 使用函数指针调用函数fp(42);
​return 0;
}

综合示例

以下示例综合使用了结构体、枚举和typedef,演示了如何使用自定义类型。

#include <stdio.h>
​
// 定义枚举类型别名
typedef enum {MALE,FEMALE
} Gender;
​
// 定义结构体类型别名
typedef struct {char name[50];int age;Gender gender;
} Person;
​
// 函数声明
void print_person(Person p);
​
int main() {// 创建Person结构体变量Person person1 = {"Alice", 30, FEMALE};Person person2 = {"Bob", 25, MALE};
​// 打印Person信息print_person(person1);print_person(person2);
​return 0;
}
​
// 函数定义
void print_person(Person p) {printf("Name: %s\n", p.name);printf("Age: %d\n", p.age);printf("Gender: %s\n", p.gender == MALE ? "Male" : "Female");
}

总结

通过typedef关键字,你可以为现有的数据类型创建新的名称,使代码更加简洁易读。typedef常用于简化结构体、枚举和函数指针的声明与使用。掌握typedef的用法能够提高代码的可读性和可维护性。

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

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

相关文章

52、有边数限制的最短路

有边数限制的最短路 题目描述 给定一个n个点m条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c; 边权可能为负数。 请你求出从1号点到n号点的最多经过k条边的最短距离&#xff0c;如果无法从1号点走到n号点&#xff0c;输出impossible。 注意&#xff1a;图中可…

查看 WSL2 (Windows Subsystem for Linux 2) IP 地址

查看 WSL2 [Windows Subsystem for Linux 2] IP 地址 1. ipconfig2. ping $(hostname).local3. cat /etc/resolv.conf4. ip route show5. ip addrReferences 1. ipconfig Windows 系统上与 WSL2 (Windows Subsystem for Linux 2) 接口的地址 172.31.32.1。 Microsoft Windows…

米尔MYC-Y6ULX-V2开发板测评记录

文章目录 1、板子上手体验2、板载硬件3、系统信息4、 驱动测试5、编译linux三大件7、摄像头测试9、总结 1、板子上手体验 首先非常感谢芯查查给了这样一个机会来测评这样一款性能十分强大的开发板&#xff0c;我拿到手的是MYC-Y6ULX-V2核心板及开发板&#xff0c;这块板子具有…

STM32HAL-最简单的长、短、多击按键框架

目录 概述 一、开发环境 二、STM32CubeMx配置 三、编码 四、运行结果 五、总结 概述 本文章使用最简单的写法实现长、短、多击按键框架&#xff0c;非常适合移植各类型单片机&#xff0c;特别是资源少的芯片上。接下来将在stm32单片机上实现&#xff0c;只需占用1个定时…

动态控制eBPF程序加载:检查 Tracepoint、Kprobe是否存在

前言 在 eBPF 程序开发中&#xff0c;确保程序能够在各种不同的系统配置中兼容运行是至关重要的。本文将详细介绍一个方案&#xff0c;通过动态检查Tracepoint、Kprobe是否存在&#xff0c;并结合libbpf的API接口控制 eBPF 程序的加载。这种方法不仅可以提升程序的灵活性&…

jwt 实现用户登录完整java

登录校验逻辑 用户登录的校验逻辑分为三个主要步骤&#xff0c;分别是校验验证码&#xff0c;校验用户状态和校验密码&#xff0c;具体逻辑如下 前端发送username、password、captchaKey、captchaCode请求登录。判断captchaCode是否为空&#xff0c;若为空&#xff0c;则直接…

AWS联网和内容分发服务

概况 VPC Amazon Virtual Private Cloud (Amazon VPC) 让您能够全面地控制自己的虚拟网络环境&#xff0c;包括资源放置、连接性和安全性。首先在 AWS 服务控制台中设置 VPC。然后&#xff0c;向其中添加资源&#xff0c;例如 Amazon Elastic Compute Cloud (EC2) 和 Amazon …

数据分析必备:一步步教你如何用Pandas做数据分析(15)

1、Pandas 数据丢失 Pandas 数据丢失的操作实例 在现实生活中&#xff0c;数据丢失始终是一个问题。机器学习和数据挖掘等领域在模型预测的准确性方面面临严重问题&#xff0c;因为缺少值会导致数据质量较差。在这些领域中&#xff0c;缺失值处理是使模型更准确和有效的主要重…

定个小目标之每天刷LeetCode热题(7)

今天这道题是道简单题&#xff0c;使用双指针进行迭代即可&#xff0c;画了下草图如下 代码如下 class Solution {public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode p head, q head.next, temp null;while (q ! nu…

【Python如何将EXCEL拆分】

文章目录 Python将一个EXCEL表拆分多个excel表Python将一个EXCEL表中一个sheet拆分多个sheet表 Python将一个EXCEL表拆分多个excel表 在Python中&#xff0c;你可以使用pandas库来读取Excel文件&#xff0c;并将一个大的Excel表格&#xff08;工作表&#xff09;拆分成多个单独…

Writerside生成在线帮助文档或用户手册软件基础使用教程

Writerside是JetBrains出的一个技术文档工具&#xff0c;既能用在JetBrains IDE上&#xff0c;也能单独用。它能帮你轻松写、建、测、发技术文档&#xff0c;像产品说明、API参考、开发指南等都能搞定。 特点&#xff1a; 文档即代码&#xff1a;它让你像管代码一样管文档&…

【大数据Spark】常见面试题(万字!建议收藏)

文章目录 入门级中等难度中高级难度数据倾斜解决方法 入门级 什么是Apache Spark&#xff1f;它与传统的MapReduce有何不同&#xff1f; Apache Spark是一个开源的分布式计算系统&#xff0c;它提供了高效的数据处理和分析能力。与传统的MapReduce相比&#xff0c;Spark具有更快…

海光CPU:国产信创的“芯“动力解读

国产信创CPU-海光CPU CPU&#xff1a;信创根基&#xff0c;国之重器 国产CPU形成三大阵营&#xff1a;自主架构、x86及ARM。自主阵营中&#xff0c;龙芯和申威以LoongArch和SW-64为基石&#xff1b;ARM阵营由鲲鹏、飞腾主导&#xff0c;依托ARM授权研发处理器&#xff1b;x86阵…

红帽练习 之逻辑卷 pv lv gv

逻辑卷习题 1 在/dev/sdb 存储设备上创建物理设备分区 创建2个大小各为256MB的分区 并设置为linux lvm类型 使用first 和second 作为这些分区的名称 parted /dev/sdb mklabel gpt parted /dev/sdb primary mkpart first 1M 256M parted /dev/sdb set 1 …

【Linux|数据恢复】extundelete和ext4magic数据恢复工具使用

环境&#xff1a;Centos7.6_x86 一、extundelete工具 1、extundelete介绍 Extundelete 是一个数据恢复工具&#xff0c;用于从 ext3 或 ext4 分区中恢复删除文件。根据官网0.2.4版本介绍是支持ext4&#xff0c;但实际上使用发现ext4格式有些问题&#xff0c;会报以下错误&…

动态SQL IF语句

IF语句学习 第一种写法(标准) 我们先来看以下标准写法: select * from .. <where> <if test""> and ....... <if test""> and ....... <where> 我们用了一个where标签 , 内嵌if语句 第二种写法: 这是第二种写法:不用where标…

大降分!重邮计算机专硕复试线大降50分!重庆邮电计算机考研考情分析!

重庆邮电大学&#xff08;Chongqing University of Posts and Telecommunications&#xff09;简称重邮&#xff0c;坐落于中国重庆市主城区南山风景区内&#xff0c;是中华人民共和国工业和信息化部与重庆市人民政府共建的教学研究型大学&#xff0c;入选国家“中西部高校基础…

一篇文章搞懂Go语言切片底层原理(图文并茂+举例讲解)

1. 切片和数组的底层关系 Go语言切片的数据结构是一个结构体&#xff1a; type slice struct {array unsafe.Pointerlen intcap int }Go语言中切片的内部结构包含地址、大小和容量。将数组比喻成一个蛋糕&#xff0c;那么切片就是需要切的那一块&#xff0c;而那一块的的…

c++学生管理系统

想要实现的功能 1&#xff0c;可以增加学生的信息&#xff0c;包括&#xff08;姓名&#xff0c;学号,c成绩&#xff0c;高数成绩&#xff0c;英语成绩&#xff09; 2&#xff0c;可以删除学生信息 3&#xff0c;修改学生信息 4&#xff0c;显示所有学生信息 5&#xff0c…

支持AMD GPU的llm.c

anthonix/llm.c: LLM training in simple, raw C/HIP for AMD GPUs (github.com) llm.c for AMD devices This is a fork of Andrej Karpathys llm.c with support for AMD devices. 性能 在单个7900 XTX显卡上使用默认设置&#xff0c;目前的训练步骤耗时约为79毫秒&#x…