首页 > 其他分享 >C 语言typedef 命令

C 语言typedef 命令

时间:2024-11-16 11:18:07浏览次数:3  
标签:typedef 语言 示例 int 别名 char 命令 类型

目录

1.简介

2.主要好处


1.简介

typedef命令用来为某个类型起别名。

typedef type name;

上面代码中,type代表类型名,name代表别名。

typedef unsigned char BYTE;

BYTE c = 'z';

上面示例中,typedef命令为类型unsign char起别名BYTE,然后就可以使用BYTE声明变量。

typedef 可以一次指定多个别名。

typedef int antelope, bagel, mushroom;

上面示例中,一次性为int类型起了三个别名。

typedef 可以为指针起别名。

typedef int* intptr;

int a = 10;
intptr x = &a;

上面示例中,intptrint*的别名。不过,使用的时候要小心,这样不容易看出来,变量x是一个指针类型。

typedef 也可以用来为数组类型起别名。

typedef int five_ints[5];

five_ints x = {11, 22, 33, 44, 55};

上面示例中,five_ints是一个数组类型,包含5个整数的

typedef 为函数起别名的写法如下。

typedef signed char (*fp)(void);

上面示例中,类型别名fp是一个指针,代表函数signed char (*)(void)

2.主要好处

typedef为类型起别名的好处,主要有下面几点。

(1)更好的代码可读性。

typedef char* STRING;

STRING name;

上面示例为字符指针起别名为STRING,以后使用STRING声明变量时,就可以轻易辨别该变量是字符串。

(2)为 struct、union、enum 等命令定义的复杂数据结构创建别名,从而便于引用。

struct treenode {
  // ...
};

typedef struct treenode* Tree;

上面示例中,Treestruct treenode*的别名。

typedef 也可以与 struct 定义数据类型的命令写在一起。

typedef struct animal {
  char* name;
  int leg_count, speed;
} animal;

上面示例中,自定义数据类型时,同时使用typedef命令,为struct animal起了一个别名animal

这种情况下,C 语言允许省略 struct 命令后面的类型名。

typedef struct {
  char *name;
  int leg_count, speed;
} animal;

上面示例相当于为一个匿名的数据类型起了别名animal

(3)typedef 方便以后为变量改类型。

typedef float app_float;

app_float f1, f2, f3;

上面示例中,变量f1f2f3的类型都是float。如果以后需要为它们改类型,只需要修改typedef语句即可。

typedef long double app_float;

上面命令将变量f1f2f3的类型都改为long double

(4)可移植性

某一个值在不同计算机上的类型,可能是不一样的。

int i = 100000;

上面代码在32位整数的计算机没有问题,但是在16位整数的计算机就会出错。

C 语言的解决办法,就是提供了类型别名,在不同计算机上会解释成不同类型,比如int32_t

int32_t i = 100000;

上面示例将变量i声明成int32_t类型,保证它在不同计算机上都是32位宽度,移植代码时就不会出错。

这一类的类型别名都是用 typedef 定义的。下面是类似的例子。

typedef long int ptrdiff_t;
typedef unsigned long int size_t;
typedef int wchar_t;

这些整数类型别名都放在头文件stdint.h,不同架构的计算机只需修改这个头文件即可,而无需修改代码。

因此,typedef有助于提高代码的可移植性,使其能适配不同架构的计算机。

(5)简化类型声明

C 语言有些类型声明相当复杂,比如下面这个。

char (*(*x(void))[5])(void);

typedef 可以简化复杂的类型声明,使其更容易理解。首先,最外面一层起一个类型别名。

typedef char (*Func)(void);
Func (*x(void))[5];

这个看起来还是有点复杂,就为里面一层也定义一个别名。

typedef char (*Func)(void);
typedef Func Arr[5];
Arr* x(void);

上面代码就比较容易解读了。

  • x是一个函数,返回一个指向 Arr 类型的指针。
  • Arr是一个数组,有5个成员,每个成员是Func类型。
  • Func是一个函数指针,指向一个无参数、返回字符值的函数。

标签:typedef,语言,示例,int,别名,char,命令,类型
From: https://blog.csdn.net/xinfanyyds/article/details/143814529

相关文章

  • C 语言的内存管理
    目录1.简介2.void指针3.malloc()4.free()5.calloc()6.realloc()7.restrict说明符8.memcpy()9.memmove()10.memcmp()1.简介C语言的内存管理,分成两部分。一部分是系统管理的,另一部分是用户手动管理的。系统管理的内存,主要是函数内部的变量(局部变量)。这部分变量......
  • 使用 Neko 编程语言实现简单的滑动验证码识别
    滑动验证码是一种常见的安全验证方式,要求用户将图块拖动到正确位置。本文将使用Neko编程语言实现一个简单的滑动验证码识别程序,通过基本的图像处理技术自动识别图块匹配位置。实现步骤加载图片:使用Neko的图像处理库加载滑块和背景图片。图像预处理:转换为灰度图并进行边缘......
  • 【落羽的落羽 C语言篇】指针·之其二
    文章目录一、const使用指南1.const修饰变量2.const修饰指针变量二、野指针1.野指针的概念2.野指针的成因3.如何规避野指针三、assert(断言)使用指南四、传值调用和传址调用1.传值调用2.传址调用一、const使用指南1.const修饰变量众所周知,变量是可以修......
  • 什么是C语言中的指针?
    1.基本概念在C语言中,指针是一种变量,它存储的是另一个变量的内存地址。可以把内存想象成一个巨大的公寓楼,每个变量就像住在公寓里的居民,而指针就是写着居民房间号(内存地址)的纸条。例如,假设有一个整型变量a,它存储在内存中的某个位置,指针变量p就可以用来保存变量a的内存地......
  • VMR 实战指南:一站式管理多语言SDK
    1.引言在现代软件开发中,我们经常需要同时使用多种编程语言和工具。管理这些不同语言的SDK版本可能会成为一个令人头疼的问题。VMR(VersionManager)提供了一个统一的界面来管理多种编程语言的SDK,简化了开发环境管理。本文将深入探讨VMR的安装、配置和使用。2.VMR简介......
  • c语言sizeof与strlen的区别详细解析
    char*p="abcdef";printf("%d\n",sizeof(p));p是指针变量(地址),地址就是地址,大小就是4/8字节printf("%d\n",sizeof(p+1));p+1是b的地址,还是地址4/8字节printf("%d\n",sizeof(*p));*p是‘a’,sizeof(*p)计算的是字符的大小,是1字节printf("%d\n"......
  • c语言——三子棋基础游戏
    首先,我们先有整体思路:它的棋盘到底是怎么样子的?它实现的过程是怎么一步一步来的棋盘到底是怎么样子的?大概是这么一个轮廓。实现过程中,我们该如何思考呢?1.我们想到,开始游戏的时候,我们肯定会一个菜单的吧?2.利用菜单选择是否开始游戏3.开始游戏后,我们就开始设计排版棋盘了:1......
  • 【C语言指南】C语言内存管理 深度解析
           ......
  • 关于我重生到21世纪学C语言这件事——指针详解(2)
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录1.数组名的理解2.使⽤指针访问数组3.⼀维数组传参的本质4.冒泡排序5.⼆级指针6.指针数组7.指针数组模拟⼆维数组1.数组名的理解在上⼀个章节我们在使⽤指针访问数组的内容时,有这样的代码:intarr[10]={1,......
  • Linux cp和mv命令 对于目录复制到目录的情况 的 所有情况示例
    cp和mv命令的行为总结表假设以下路径设置:源路径:/nihao或/nihao//nihao包含文件和子目录:file1,dir1/,file2目标路径:/nima或/nima/表格cp命令行为命令目标路径存在?最终路径结构cp-r/nihao/nima/是/nima/nihao/cp-r/nihao//nima/是/ni......