iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中typedef的用法以及#define区别详解
  • 706
分享到

C语言中typedef的用法以及#define区别详解

2024-04-02 19:04:59 706人浏览 安东尼
摘要

目录1、简洁定义 2、为已有类型起别名 为字符数组起别名为指针起别名3、typedef 和 #define 的区别总结1、简洁定义 C语言允许为一个数据类型起一个新的别名,就像给人

1、简洁定义

C语言允许为一个数据类型起一个新的别名,就像给人起“绰号”一样。而编程中起别名,是为了编程人员编程方便,例如:

定义如下结构体


struct stu
{
	int ID;
	char name[20];
	float score[3];
	char *data;
};

要想定义一个结构体变量就得这样写:


struct stu Marry;//Marry是定义的新结构体学生

这个地方可以用我们今天的主题语法:typedef,来减少定义时需要的字符,来完成目的,如下:


typedef struct stu
{
	int ID;
	char name[20];
	float score[3];
	char *data;
}STU;
//定义一个Marry学生结构体
STU Marry;

可以看到非常简单的定义字符,完成结构体定义,另外typedef也可以用于已有类型,为已有类型起一个新的名字。

2、为已有类型起别名

typedef 的用法一般为:

typedef oldName newName;

例如如下,为int起名 Integer:


typedef int MY_int;
MY_int a, b;
a = 1;
b = 2;

这里 MY_int a, b ; 等同于 int a, b;

typedef 还可以给数组、指针、结构体等类型定义别名。先来看一个给数组类型定义别名的例子:

为字符数组起别名

typedef char ARRAY20[20];

表示 ARRAY20 是类型char [20]的别名。它是一个长度为 20 的数组类型。接着可以用 ARRAY20 定义数组:

ARRAY20 a1, a2, s1, s2;

结果如下,可以看到ARRAY20 定义的数组长度是20个字符。

因此 ARRAY20 a1, a2, s1, s2; 等价于 char a1[20], a2[20], s1[20], s2[20]; ,即数组也是有类型的,例如char a1[20];定义了一个数组 a1,它的类型就是 char [20]。

为指针起别名

为指针类型定义别名,例如如下:

typedef int (*ptr_to_arr)[4];

表示 ptr_to_arr是类型int * [4]的别名,它是一个二维数组指针类型。接着可以使用 ptr_to_arr定义二维数组指针:

ptr_to_arr p1, p2;

这代表p1, p2都是二维数组指针,同样也可以为函数指针类型定义别名:


typedef int (*ptr_to_func)(int, int);
ptr_to_func pfunc;

如下表示为指针类型和函数类型起别名:


#include <stdio.h>

typedef char (*ptr_to_arr )[30];
typedef int (*ptr_to_func )(int, int);

int max(int a, int b){
    return a>b ? a : b;
}

char str[3][30] = {
    "Happy New Year",
    "Good Good Study",
    "Day Day up"
};

int main(){
    ptr_to_arr parr = str;//parr 代表一个二维数组指针,指向str这个二维数组对应元素
    ptr_to_func  pfunc = max;//pfunc代表一个函数指针,指向max函数
    int i;
   
    printf("max: %d\n", (*pfunc)(10, 20));
    for(i=0; i<3; i++){
        printf("str[%d]: %s\n", i, *(parr+i));
    }

    return 0;
}

结果如下:

需要强调的是,typedef 是赋予现有类型一个新的名字,而不是创建新的类型。为了“见名知意”,请尽量使用含义明确的标识符,并且尽量大写。

3、typedef 和 #define 的区别

typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把 typedef 看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。例如如下情况:

1)能否使用其他类型说明符对宏类型名进行扩展

用unsigned 配合 #define定义的变量,可以使用:


#define MY_int int
unsigned MY_int n;  //没问题

但是用unsigned 配合 typedef 定义的变量,则不可以使用:


typedef int MY_int ;
unsigned MY_int n;  //错误,不能在 MY_int 前面添加 unsigned

表明了typedef 的完整性。

2)在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。例如:


#define My_int int *
My_int p1, p2;

//如果用宏替换则变为:

int *p1, p2;

这样会使, p1、p2 成为不同的类型,p1为指向int类型的指针,p2为int类型数据。

对于typedef定义的别名,不存在上述的情况,例如:


typedef int * PTR_INT
PTR_INT p1, p2;

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

总结

到此这篇关于C语言中typedef的用法以及#define区别的文章就介绍到这了,更多相关C语言typedef及#define区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言中typedef的用法以及#define区别详解

本文链接: https://www.lsjlt.com/news/129904.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言中typedef的用法以及#define区别详解
    目录1、简洁定义 2、为已有类型起别名 为字符数组起别名为指针起别名3、typedef 和 #define 的区别总结1、简洁定义 C语言允许为一个数据类型起一个新的别名,就像给人...
    99+
    2024-04-02
  • 详解C语言中typedef和#define的用法与区别
    目录一、typedef的用法二、#define的用法三、typedef与#define的区别四、typedef的用途用途一用途二用途三用途四五、typedef的陷阱陷阱一陷阱二一、t...
    99+
    2024-04-02
  • 详解C++中typedef 和 #define 的区别
    1、执行上不同 关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能。 #define 则是宏定义,发生在预处理阶段,也就是编译之前,它只...
    99+
    2024-04-02
  • c语言中typedef和define的区别是什么
    这篇文章主要介绍“c语言中typedef和define的区别是什么”,在日常操作中,相信很多人在c语言中typedef和define的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c语言中typed...
    99+
    2023-06-25
  • C语言中const和define的区别你了解嘛
    目录define和const使用const和define区别总结define和const使用 const和define区别 #include <stdio.h> #...
    99+
    2024-04-02
  • C语言中*和&的区别及使用方法详解
    在 c 语言中, 用于解引用指针,返回指向的值;&amp;amp;amp;amp;amp;amp;amp; 用于取地址,返回指向该变量的指针。 通常用于访问或修改指针所指向的值;...
    99+
    2024-04-03
    c语言 * &amp;amp;
  • c语言中define的用法
    c 语言的 define 指令用于定义宏,实现代码复用和维护性。其用法为:#define 宏名 值。优点包括:定义常量、简化代码和提高可维护性。注意事项包括:宏名不能以数字或下划线开头,...
    99+
    2024-05-02
    c语言
  • c语言中typedef struct的用法
    typedef struct 在 c 语言中用于创建结构体类型别名,简化结构体使用。它通过指定结构体别名将一个新的数据类型作为现有结构体的别名。优点包括增强可读性、代码重用和类型检查。注...
    99+
    2024-05-09
    c语言 作用域 typedef
  • typedef在c语言中的用法
    typedef在c语言中创建类型别名,用法步骤如下:声明类型别名:使用typedef关键字和现有数据类型定义新名称。使用别名声明变量:用类型别名代替原始数据类型进行变量声明。好处包括提高...
    99+
    2024-04-29
    c语言 代码可读性 typedef
  • C语言中const和define的区别是什么
    本文小编为大家详细介绍“C语言中const和define的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中const和define的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。def...
    99+
    2023-06-29
  • typedef struct在c语言中用法
    typedef 关键字用于创建自定义数据类型的别名,允许简化复杂结构的名称。使用步骤如下:创建自定义数据类型(如结构体);使用 typedef 将其赋予一个新名称(别名);使用别名替代原...
    99+
    2024-05-09
    c语言 代码可读性 typedef 标准库
  • c语言中typedef的作用
    typedef 在 c 语言中用于创建一种新的数据类型别名,提高代码可读性、可维护性和可移植性。它的语法为:typedef 。例如,typedef int my_int;可创建一个名为...
    99+
    2024-05-09
    c语言 typedef
  • C语言中break与continue的用法和区别详解
    目录前言一、循环体中两者的作用1.while循环2.for循环3.do while循环二、switch语句总结前言 本文将通过简单的实例来详细分析在C语言中break语句和conti...
    99+
    2024-04-02
  • C语言指针与引用的区别以及引用的三种用法案例详解
    1.指针与引用的区别: 指针是一块内存的地址值,而引用是一块内存的别名。 下面引自://www.jb51.net/article/221791.htm 从概念上讲。指针从本质上讲就是...
    99+
    2024-04-02
  • C语言#define定义宏的使用详解
    目录1.宏是什么2.宏的用法3. 宏的注意事项4. 宏和函数的区别5.命名要求6. 条件编译常见条件编译指令及应用场景1.宏是什么 #define 机制包括了一个规定,允许把参数替换...
    99+
    2022-11-13
    C语言#define定义宏 C语言 #define
  • C语言中的typedef怎么用
    这篇“C语言中的typedef怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的typedef怎么用”文章吧。可...
    99+
    2023-06-16
  • C语言详细分析讲解关键字enum与sizeof及typedef的用法
    目录一、枚举类型的使用方法二、sizeof 关键字的用法三、typedef 的意义四、小结一、枚举类型的使用方法 enum 是 C 语言中的一种自定义类型enum 值是可以根据需要自...
    99+
    2024-04-02
  • C语言之结构体定义typedef struct用法详解
    在C语言中,使用struct关键字可以定义一个结构体类型,用于存储不同类型的数据。为了方便使用,可以使用typedef关键字给结构体...
    99+
    2023-08-09
    C语言
  • 怎么使用C语言中的typedef
    本篇内容介绍了“怎么使用C语言中的typedef”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在单片机和操作系统中 typedef 会经常用...
    99+
    2023-06-25
  • C语言中getchar的用法以及实例解析
    目录getchar解析一、getchar的返回类型及作用机制二、根据一段代码初步了解三、实例(“输入密码”)进一步了解1、代码达不到理想效果2、输入的密码中有...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作