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应用的更多相关文章

  1. 19-typedef

    本文目录 一.typedef作用简介 二.typedef与指针 三.typedef与结构体 三.typedef与指向结构体的指针 四.typedef与枚举类型 五.typedef与指向函数的指针 六. ...

  2. #define与typedef在重定义类型中的区别

    #define 为完全的替换 typedef 重新定一个数据类型 eg #define charp1 char* typedef char* charp2charp1 a,b; //a char* b ...

  3. typedef

    第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...

  4. 用typedef定义函数指针的问题

    在学习windows API的时候,遇到下面这段代码   以前见过的typedef的用法都是给一个数据类型取一个别名 typedef oldTypeName newTypeName   这种给数据类型 ...

  5. C语言语法 typedef小结

    在总结typedef之前,先了解一个专业术语: 常量指针(const pointer):常量指针在定义的时候必须被初始化,而且一旦初始化完成,则它的值就不能再改变. int errNumb = 0; ...

  6. 如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  7. C及C++中typedef的简单使用指南

    又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也看了不少关于typedef用法的博客.于是 ...

  8. [转]关于typedef的用法总结

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...

  9. typedef 和 #define 的区别

    本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...

  10. [转载]彻底弄清struct和typedef struct

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

随机推荐

  1. 数据库blob图片文件,多图片打包下载

    数据库存储blob图片文件,前端打包下载 数据库图片文件实体类 package com.cmrh.mspserver.pos.dto; import java.io.Serializable; imp ...

  2. Android.mk文件LOCAL_MODULE_TAGS 说明

    在移植wireless_tools驱动的时候发现居然没去编译咱的代码,奇怪,后来发现只有LOCAL_MODULE_TAGS 选项这个最有可疑,后来发现有这个说法 LOCAL_MODULE_TAGS : ...

  3. Mysql中如何查看慢查询以及查看线程

    一.MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句 1,slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句. 2,long_query_time ...

  4. 京东 PC 首页 2019 改版前端总结 原创: 何Jason,EC,小屁 凹凸实验室 今天

    京东 PC 首页 2019 改版前端总结 原创: 何Jason,EC,小屁 凹凸实验室 今天

  5. git如何将旧commit的相关notes复制到新commit?

    答: git notes copy <old-commit> <new-commit>

  6. IDEA使用本机指定的java环境

    IDEA使用本机指定的java环境     原文链接:https://my.oschina.net/ElEGenT/blog/3053147 idea 的安装包内有自己的jre. idea 默认使用自 ...

  7. 获取IFC构件的位置数据、方向数据

    获取IFC构件的位置数据.方向数据 std::map<int, shared_ptr<BuildingEntity>> map_buildingEntity = b_model ...

  8. 多重if结构

    package com.imooc; import java.util.Scanner; public class TypeExchange { public static void main(Str ...

  9. linux非root用户安装ncurses-devel依赖

    很明显,如果我们通过yum或rpm下载安装,始终无法绕开root用户,除非我们不用yum或rpm.嗯,我们直接用源码安装.下载源码包,到http://ftp.gnu.org/gnu/ncurses/我 ...

  10. Linux记录-SVN+Jenkins+jdk+maven自动化集成部署

    1.svn部署 yum -y install subversion svnserve --version 查看版本 mkdir -p /usr/app/svn svnadmin create /usr ...