C之typedef应用
1.0关于typedef关键字的基础:
https://www.cnblogs.com/anSn/p/8783347.html
1.1 typedef 修饰“函数类型” 的调用方法:
1)我们写一段普通的函数调用:
#include<stdio.h>
int add(int a,int b); void main()
{
int d=;
d=add(,);
printf("d=%d\n",d);
}
int add(int a,int b)
{
return a+b;
}
运行结果如下:

2)我们引入typedef去修饰“函数函数类型”,并调用起来:
#include<stdio.h>
typedef int fun(int,int); fun add;//等价 int add(int a,int b);
void main()
{
int d=;
d=add(,);
printf("d=%d\n",d);
}
int add(int a,int b)
{
return a+b;
}
运行结果如下:

1.2 typedef修饰“函数指针类型”的调用方法:
1)首先,不引入typedef,写一段函数指针的定义,并指向一个函数调用起来:
#include<stdio.h> int add(int a,int b); int main()
{
int d=;
int (*p)(int,int);//定义一个函数指针。 p=add;//指针P指向一个函数地址 也可以p=&add; 结果一致的
d=p(,);//用指针调起函数 printf("d=%d\n",d);
return ;
}
int add(int a,int b)
{ return a+b;
}
运行结果如下:

2)引入typedef修饰“函数类型”,并结合指针构成函数指针后去调用函数:
#include<stdio.h>
typedef int fun(int,int);//给一个函数类型取一个别名,别名为fun int add(int a,int b); int main()
{
int d=;
fun *p;//int (*p)(int,int);//定义一个函数指针。 p=add;//指针P指向一个函数地址
d=p(,);//用指针调起函数 printf("d=%d\n",d);
return ;
}
int add(int a,int b)
{ return a+b;
}
运行结果如下:

3)typedef直接修饰“函数指针类型”,指向一个函数并调用起来:
#include<stdio.h>
typedef int (*fun)(int,int);//给一个“函数指针类型”取一个别名,别名为fun int add(int a,int b); int main()
{
int d=;
fun p;//int (*p)(int,int);//定义一个函数指针。 p=add;//指针P指向一个函数地址 也可以p=&add; 结果是一致的
d=p(,);//用指针调起函数 此为显示调用, 隐示调用为d=(*p)(1,2);两者结果是一致的。 printf("d=%d\n",d);
return ;
}
int add(int a,int b)
{ return a+b;
}

4)拓展:
把一串代表函数入口地址的整形数 强转 成 “函数指针类型”,并送实参进行调用:
#include<stdio.h>
int add(int a,int b); void main()
{
int d=; printf("add函数的入口地址为:%p\n",add); //add 0x00401005 d=((int (*)(int,int))0x00401005)(,);//函数调用。等价d=add(1,9);
//0x00401005 是一个整型地址,先把它强转成函数指针类型 :int (*)(int,int),再送参数进行调用 printf("d=%d\n",d);
}
int add(int a,int b)
{
printf("add被执行了");
return a+b;
}
运行结果如下:

C之typedef应用的更多相关文章
- 19-typedef
本文目录 一.typedef作用简介 二.typedef与指针 三.typedef与结构体 三.typedef与指向结构体的指针 四.typedef与枚举类型 五.typedef与指向函数的指针 六. ...
- #define与typedef在重定义类型中的区别
#define 为完全的替换 typedef 重新定一个数据类型 eg #define charp1 char* typedef char* charp2charp1 a,b; //a char* b ...
- typedef
第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...
- 用typedef定义函数指针的问题
在学习windows API的时候,遇到下面这段代码 以前见过的typedef的用法都是给一个数据类型取一个别名 typedef oldTypeName newTypeName 这种给数据类型 ...
- C语言语法 typedef小结
在总结typedef之前,先了解一个专业术语: 常量指针(const pointer):常量指针在定义的时候必须被初始化,而且一旦初始化完成,则它的值就不能再改变. int errNumb = 0; ...
- 如何理解typedef void (*pfun)(void)
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...
- C及C++中typedef的简单使用指南
又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客.于是 ...
- [转]关于typedef的用法总结
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...
- typedef 和 #define 的区别
本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...
- [转载]彻底弄清struct和typedef struct
struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...
随机推荐
- MYSQL安装报错需要.NET4.0
MySQL安装,提示需要.NET4.0 解决:下载安装.NET4.0即可 链接:https://pan.baidu.com/s/1u0e0lafBbR0QYEcXFsv9sQ 提取码:q6rr 复制这 ...
- mint-ui 做省市选择组件
省市的数据是动态的,其实不是动态的更好搞 <!-- 省市选择 --> <mt-popup v-model="popupVisible" position=&quo ...
- 第十五周助教工作总结——NWNU李泓毅
助教博客链接:https://www.cnblogs.com/NWNU-LHY/ 本次作业的要求:团队项目需求改进与系统设计:https://www.cnblogs.com/nwnu-daizh/p/ ...
- Java逻辑分页代码
前台jsp代码如下: <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...
- Spring中集成Ehcache缓存
1.导入依赖包 <dependency> <groupId>org.springframework</groupId> <artifactId>spri ...
- Java_jdbc 基础笔记之一 数据库连接
方式一: 1.创建一个Driver实现类的对象 2.准备连接数据库的基本信息:url,user,password 3.调用Driver接口的connect(url,info)获取数据库连接 * Dri ...
- ubuntu12.04下安装Python3.5.2 1
下载源码包 (https://www.python.org/downloads/release/python-352/) 2 解压Python-3.5.2.tar.xz 3 sudo ./conf ...
- Oracle 查询表注释以及字段注释
Oracle 查询表注释以及字段注释 --表字段信息 select * from all_tab_columns a where a.TABLE_NAME='T_X27_USER'; --表注释信息 ...
- mysql - ERROR 1114 (HY000): The table is full
mysql - ERROR 1114 (HY000): The table is full - Stack Overflowhttps://stackoverflow.com/questions/73 ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第6节 SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener_24、深入SpringBoot过滤器和Servlet配置过滤器
笔记 1.深入SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识) 简介:讲解SpringBoot里面Filter讲解和使用Servle ...