【C语言】typedef的用法简析

简介: 【C语言】typedef的用法简析

前言


C语言中typedef可以为一个数据类型定义别名(可以理解为人类的绰号),用来替代基本数据类型,数组类型,指针类型,自定义的结构体类型,枚举类型等等;这样使用可以让我们编码方便。下面我来看它在结构体中两个用法


定义基本类型和结构体

typedef int STDataType;
typedef struct Stack
{
STDataType* a;
int top; // 栈顶
int capacity; //容量
}ST;


正常定义一个结构体变量我们需要这样写:

struct Stack st1;


这样写每回要写struct感觉很麻烦,但不写又会报错,如果可以为 struct Stack 起一个别名ST(语法是在分号后面接起的新名字 如ST),这样写起来就方便了:

ST st1;


这样写好处是:写法更加简练,意义更加明确,工程实践中更会大量使用


同样的,我们可以使用关键字typedef 为各种数据类型起一个别名:

typedef int STDataType; // typedef oldname newname
typedef int STDataType;
STDataType a,b;
a = b =1;

这样做的好处是:我们在头文件中为一个数据类型起一个别名,后续会很方便的修改变量类型


typedef不仅可以为结构体也可以为数组、指针等类型起别名:

数组

typedef char array10[10];
array10 a1,a2,a3;
//等价于:
char a1[10],a2[10],a3[10];

指针

typedef int* (*pfun)(int,char*);
pfun a[5];
// 等价于
int * (*a[5]) (int ,char*);


与#define的区别:

#define 是宏定义,会在代码生成程序的预处理阶段进行宏替换(预处理功能主要包括宏定义,文件包含,条件编译,去注释等);

typedef 类似于将数据类型封装起来,能够保证定义的所有变量为同一类型

#define PTR_INT int *
PTR_INT p1, p2;


宏替换后:

int *p1, p2;


这里 p1、p2 成为不同的类型:p1 是指向 int 类型的指针,p2 是 int 类型。

typedef int * PTR_INT
PTR_INT p1, p2;



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

本节完

相关文章
|
8月前
|
算法 编译器 C语言
C语言猜数字小游戏(也包含python实现的用法)
本文基于VS2022、pycharm和前面的知识,写一个凭借分支与循环的小游戏,比如: 写一个猜数字游戏 游戏要求: 电脑自动生成1~100的随机数 玩家猜数字,猜数的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束 在pyhton中生成随机数是比较简单的,可以直接导入random的包,直接生成随机数,导致写猜数字小游戏变成了判读语句和循环语句嵌套就能写出来,所以我不做过多的介绍了,可以直接看后面的代码展示,想了解更多的python可看python的基础知识,这里面有我在学习python的过程中写的笔记
110 0
|
30天前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
109 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
4月前
|
C语言
C语言判断逻辑的高阶用法
在C语言中,高级的判断逻辑技巧能显著提升代码的可读性、灵活性和效率。本文介绍了六种常见方法:1) 函数指针,如回调机制;2) 逻辑运算符组合,实现复杂条件判断;3) 宏定义简化逻辑;4) 结构体与联合体组织复杂数据;5) 递归与分治法处理树形结构;6) 状态机管理状态转换。通过这些方法,可以更高效地管理和实现复杂的逻辑判断,使代码更加清晰易懂。
247 88
|
1月前
|
存储 C语言
【C语言】typedef 关键字详解
`typedef` 关键字在C语言中用于定义现有数据类型的别名,提高代码的可读性和可维护性。它常用于简化复杂数据类型、定义函数指针类型以及处理联合体和枚举类型。掌握 `typedef` 的用法可以使你的代码更加清晰和易于管理。
107 1
|
3月前
|
编译器 C语言
C语言:typedef 和 define 有什么区别
在C语言中,`typedef`和`#define`都是用来创建标识符以简化复杂数据类型或常量的使用,但它们之间存在本质的区别。`typedef`用于定义新的数据类型别名,它保留了数据类型的特性但不分配内存。而`#define`是预处理器指令,用于定义宏替换,既可用于定义常量,也可用于简单的文本替换,但在编译前进行,过度使用可能导致代码可读性下降。正确选择使用`typedef`或`#define`可以提高代码质量和可维护性。
|
5月前
|
存储 缓存 编译器
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(下篇)
scanf处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。
195 2
|
5月前
|
存储 C语言
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(上篇)
printf 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
99 1
|
7月前
|
存储 C语言
c语言scanf函数用法
c语言scanf函数用法
|
7月前
|
存储 C语言
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
123 2
|
7月前
|
C语言
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
40 1