文档章节

学点 C 语言(38): 函数 - 函数指针

涂孟超
 涂孟超
发布于 2014/09/26 15:32
字数 430
阅读 2
收藏 0

先复习函数的定义与函数的声明:
//这是一个求和函数的定义:
int add(int x, int y)
{
    return(x + y);
}

//可以这样声明:
int add(int x, int y);

//也可以这样声明:
int add(int, int);

 
 
 
 
 

 

 

  

定义一个函数指针声明一个函数差不多, 用 (* ) 包括函数即可:
//像这样:
int (*pfun)(int, int);

//或这样:
int (*pfun)(int x, int y);

//也可以:
typedef int (*pfun)(int, int);

//这就声明了一个叫 pfun 的函数指针, 能被它指向的函数一定要有相同的参数格式.

 
 
 
 
 

 

 

  

1. 简单例子:
#include <stdio.h>

int add(int x, int y) {return(x + y);}
int sub(int x, int y) {return(x - y);}
int mul(int x, int y) {return(x * y);}
int div(int x, int y) {return(x / y);}

int main(void)
{
    int (*pf)(int, int);

    pf = add;
    printf("%d\n", pf(9, 3)); /* 12 */
    
    pf = sub;
    printf("%d\n", pf(9, 3)); /* 6  */
    
    pf = mul;
    printf("%d\n", pf(9, 3)); /* 27 */
    
    pf = div;
    printf("%d\n", pf(9, 3)); /* 3  */
    
    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

2. 函数指针数组:
#include <stdio.h>

int add(int x, int y) {return(x + y);}
int sub(int x, int y) {return(x - y);}
int mul(int x, int y) {return(x * y);}
int div(int x, int y) {return(x / y);}

int main(void)
{
    int (*pf[4])(int, int) = {add, sub, mul, div};

    printf("%d\n", pf[0](9, 3)); /* 12 */
    printf("%d\n", pf[1](9, 3)); /* 6  */
    printf("%d\n", pf[2](9, 3)); /* 27 */
    printf("%d\n", pf[3](9, 3)); /* 3  */
    
    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

3. 用函数指针做参数:
#include <stdio.h>

int add(int x, int y) {return(x + y);}
int sub(int x, int y) {return(x - y);}
int mul(int x, int y) {return(x * y);}
int div(int x, int y) {return(x / y);}

int math(int(*pfun)(int, int), int x, int y) {
    return pfun(x, y);
}

int main(void)
{
    printf("%d\n", math(add, 9, 3)); /* 12 */
    printf("%d\n", math(sub, 9, 3)); /* 6  */
    printf("%d\n", math(mul, 9, 3)); /* 27 */
    printf("%d\n", math(div, 9, 3)); /* 3  */
    
    getchar();
    return 0;
}

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/12/04/1347840.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
C语言和C++太难?没前途?谬论!

因为有些对C++并不了解,所以就简要介绍一下。很多人对C++语言都存在误解,以为C++就是C语言的扩展,包括我自己,最开始学习C++时也是这么认为的,一是因为名字太像了,然后C++面向过程部分,...

小辰GG
2017/11/27
0
0
大神告诉你学好这几点,你就学会了C语言

很多小伙伴在初学C语言的时候完全没有什么概念,完全不知道怎么去学怎样才能掌握这门语言的重要知识点。 今天小编就来总结一下学习C语言过程中四大重点吧 ! (一)C语言要学到什么程度才算差...

诸葛玥
2018/05/25
0
0
计算机专业C语言编程学习重点:指针化难为易

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/05/31
0
0
C语言编程学习:使用函数必须知道的3点注意事项

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你学知识
2018/06/13
0
0
C语言编程新手入门基础学习:使用函数必须知道的3点注意事项

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
2018/06/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好文:华杉:我等用功,不求日增,但求日减。减一分人欲,则增一分天理,这是何等简易!何等洒脱!

#写在前面1.怎么理解“减一分人欲,则增一分天理,这是何等简易!”?1)华杉提倡 “一劳永逸” 排除浪费,少干活,多赚钱,一战而定,降低作业成本。2)华杉提倡学海无涯,回头是岸...

阿锋zxf
27分钟前
3
0
vue 的bus总线

bus声明 global.bus = new Vue() 事件发送 controlTabbar () {global.bus.$emit('pickUp', 'ddd')}, 事件接收 global.bus.$on('pickUp', (res) => {this.isFocus = true})......

Js_Mei
32分钟前
2
0
大型系统演进之路-负载均衡演进

Nginx做负载均衡 通过Nginx的反向代理将请求分发到tomcat中,如果tomcat支持100并发,Nginx支持50000并发,理论上nginx把请求发送到500个tomcat就可以了。 LVS或F5做多个Nginx负载均衡 Tomc...

春哥大魔王的博客
37分钟前
4
0
Sqlite时间段查询中遇到的问题

问题: 我要查询DateTime时间其中的一段符合时间要求的数据,比如我要查询‘2019-06-06 16:50:00’至‘2019-06-06 16:59:00’这一段的数据 开始用这段代码 strSql= ("select * from Coll...

rainbowcode
40分钟前
2
0
大数据(hadoop-数据入库系统Sqoop原理架构)

Sqoop是什么 Sqoop:SQL-to-Hadoop 连接传统关系型数据库和Hadoop的桥梁 把关系型数据库的数据导入到 Hadoop 系统 ( 如 HDFS、HBase 和 Hive) 中; 把数据从 Hadoop 系统里抽取并导出到关系型...

这很耳东先生
55分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部