引言

typedef在C语言中给结构体取别名的用法很常见,这种用法很很容易理解,但当用typedef来给函数、数组取别名时,或许这种写法理解起来比较晦涩。以下用一些例子来展现typedef的部分用法。

栗子

1、结构体取别名

//第一种写法
struct cat{char *name;short age;
}CAT;
typedef strcut cat CAT;//第二种写法
typedef struct cat{char *name;short age;
}CAT;

给结构体取别名很简单,可以选择先定义一个结构体,再给该结构体取别名;也可以在定义结构体的同时,给结构体取别名。

网上有许多文章谈到了typedef取别名时,遇到const关键字时可能会遭遇的陷阱,如这篇文章谈到了

对于指针常量和常量指针,举个栗子

int o = 5;
int *m = &o;/*
*const修饰int *,可以看作修饰一块内存区域,表明该区域内容是不可修改的,
*不可修改是针对指针a的,也就是不能通过a取修改这个区域的值。但是可以通过m去修改这个区域的内容
*/
const int *a = &o;   /*
*const修饰b,即修饰这个指针变量,而指针是指向一块内存区域的,所以此时的const相当于固定了b的指向,
*即b只能指向o所在的那块内存区域,不能指向其他区域,也就是说,b = m; 这句是有错的。
*/
int* const b = &o;

2、函数以及数组

先看这篇文章C语言typedef与复杂函数声明问题的深入解析

首先第一个,typedef int *(*pFun)(int, char*),我们可以分析一下,众所周知,函数的声明包含了返回值、函数名以及参数,形如 返回值 函数名(参数1,参数2...)

在这里,我们可以这样理解,int *是返回值,(*pFun)是函数名,(int,char *)是参数,而(*pFun)中pFun是一个指针,也就是说,有一个一个返回值是int *,参数是(int,char *)的函数,用typedef给该函数的一个函数指针取个别名叫做pFun。

反过来理解,我有一个需求,我想定义一个函数指针叫做pFun,他的返回值是int *,参数是(int ,char *),那么我就可以这样做

typedef int *(*pFun) (int,char *);

以此类推第二个,我想定义一个函数指针pFun,他无返回值,参数是一个函数指针pFunParam,pFunParam这个函数指针也没有返回值,也没有参数,那么就可以定义为

typedef void (*pFunParam)();
typedef void (*pFun)(pFunParam);

第三个,我有一个这样的需求,我想定义一个数组,这个数组里面的元素是函数指针,这个函数指针叫做pFun,他的返回值是double,没有参数,然后想用一个别名pFunParam来表示这个数组指针。

typedef double (*pFun)();
typedef pFun (*pFunParam)[9];

理解或许有误,欢迎指正~~

参考资料

[1] C语言typedef与复杂函数声明问题的深入解析

[2]小心使用 typedef 带来的陷阱

C语言——typedef的用法相关推荐

  1. 第十章 结构体_C语言typedef的用法详解

    C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...

  2. c语言typedef的用法,C语言中typedef用法总结,看完就能像编程老手一样熟练运用...

    请看下文 C语言中typedef关键字应用比较常见,许多C语言初学者对它的用法不甚了解.事实上,我们可以用typedef来定义自己习惯使用的数据类型名称,可以替代自己所熟悉的基本类型.数组类型.指针类 ...

  3. C语言typedef的用法详解

    C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...

  4. C语言typedef的用法

    参考链接 一.概念 C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称. 示例: typedef int BOOL;//定义一个布尔类型 #define TRUE 1 #defin ...

  5. c语言 typedef的用法

    #include <stdio.h> #include <stdlib.h> typedef int MyDefineInt; typedef struct Node{   i ...

  6. c语言typedef(c语言typedef和define)

    什么是C语言 C語言是1972年左右由DennisRitchie一??人在?????室(?稱AT&T)設?開發出?淼碾?腦程式語言.他??r與KenThompson?扇斯餐??UNIX作?I ...

  7. c语言typedef怎么自定义函数,c语言中typedef的用法

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  8. typedef的用法——c语言

    一.ypedef 1.1:typedef的用法(如上图所示)           typedef 用法一句话总结----把定义的类型改名 举个例子:我们熟悉的int类型   定义一个变量, 如int  ...

  9. 【C语言】结构体定义 typedef struct 用法详解和用法小结

    结构体定义 typedef struct 用法详解和用法小结 文章目录 结构体定义 typedef struct 用法详解和用法小结 0. 前言 1. 首先:在C中定义一个结构体类型要用typedef ...

最新文章

  1. MDK出现红叉,程序编译正常没有错误
  2. L3-021 神坛(极角排序求三角形最小面积)
  3. linux inotifywait脚本,使用inotify/fswatch构建自动监控脚本
  4. Java学习笔记(7)——Java基础之IO多线程网络思维导图
  5. 用map实现数据字典功能
  6. 常用技巧 —— 打表规律
  7. python运维脚本部署jdk_Jenkins 为Jenkins添加Windows Slave远程执行python项目脚本
  8. 测试中常见bug总结
  9. Windows workflow foundation之旅(三)——指南2(创建状态机工作流)(上)
  10. windows server 2012 安装 VC2015 安装失败0x80240017解决方法
  11. 盘点 7 个超级 Nice 的微信小程序项目
  12. 配置环境变量时Path单行显示问题
  13. 停车场管理系统 Java语言
  14. 我想健康富有聪明怎么导告_富有成效的远程工作(当您的心理健康说“否”时)
  15. Elasticsearch nested嵌套类型
  16. 计算机汉字输入发明人王,音形派生键形码计算机汉字输入方法专利_专利查询 - 天眼查...
  17. contourf()绘制填充颜色的二维等高线图
  18. Qt任务栏图标增加进度条
  19. 数学建模:种群竞争模型
  20. 如何区分ipad2和ipad3

热门文章

  1. Metasploit技术(一)——Metasploit简介与基础
  2. IDC云灾备白皮书:云灾备支持未来业务持续性新需求
  3. 2020-08-09 我来邀请码
  4. 项目管理界最经典教材——PMBOK指南,如果现在备考PMP看哪一版?
  5. Linux学习笔记(二十三) -- QT的安装和卸载
  6. fastadmin html模板,使用fastadmin的页面异常模板
  7. 阿里云服务器企业用户最新配置表!
  8. compare和compareTo使用区别
  9. codecombat计算机科学入门四(python)
  10. JVM 内存模型面试题目