C语言——指向函数的指针
转载自:http://www.cnblogs.com/liangyan19910818/archive/2011/08/19/2145270.html
C语言——指向函数的指针
- 函数类型 (* 函数指针变量)() ; //指向函数的入口地址
一个函数是若干语句的集合 , 经编译后存储在函数代码存储区 , 并占有一片连续的存储空间 ,对函数指针只能用函数名赋值而无其他运算

#include<stdio.h>
int max(int x ,int
y);
int main()
{
int (* p)() ;//定义p是指向函数的指针变量
int a , b , c ;
p= max ;//将函数max的入口地址赋给指针变量p
scanf("%d %d"
,&a ,&b) ;
c= (* p)(a , b) ;//用指向函数的指针变量p调用函数
printf("a = %d , b = %d , max = %d"
, a , b , c);
return ;
}
int max(int x ,int
y)
{
int k ;
k= (x> y)?
x : y ;
return k ;
}

函数名作为实际参数 :

- #include <stdio.h> int fun1(int a , int b)
- {
- return a+b ;
- }
- int fun2(int (*q)() , int x , int y)
- {
- return (*q)(x , y) ;
- }
- int main()
- {
- int (*p)() , k ;
- p = fun1 ;
- k = fun2( p , , ) ;
- printf("k = %d \n" , k); //输出 13 return ;
- }

设置一个函数proc ,每次调用它会实现不同的功能 ,输入 a , b 两个数 ,第一次调用proc时,找出两者中最大者 , 第二次找出最小者 , 第三次调用求两数之差 :

- #include <stdio.h> int max(int*x , int*y);
- int min(int*x , int*y);
- int a_b(int*x , int*y);
- int proc(int*x , int*y , int(*p)());
- int main()
- {
- int a , b ;
- printf("Enter a and b :");
- scanf("%d %d" , &a , &b);
- printf("a = %d \t b = %d \n" , a , b);
- printf("max(%d,%d) = " , a , b);
- proc(&a , &b , max);
- printf("min(%d,%d) = " , a , b);
- proc(&a , &b , min);
- printf("%d - %d = " , a , b);
- proc(&a , &b , a_b);
- return ;
- }
- int max(int*x , int*y)
- {
- int k ;
- k = (*x >*y) ?*x : *y ;
- return k ;
- }
- int min(int*x , int*y)
- {
- int k ;
- k = (*x <*y) ?*x : *y ;
- return k ;
- }
- int a_b(int*x , int*y)
- {
- int k ;
- k =*x -*y ;
- return k ;
- }
- int proc(int*x , int*y , int (*p)())
- {
- int q ;
- q = (*p)(x , y);
- printf("%d\n" , q);
- return ;
- }

一个简单的主控菜单程序 , 包括 增加 , 删除 , 显示 , 退出

- #include <stdio.h> #include <string.h>//字符操作 #include <stdlib.h>//包含system函数 void enter() ;
- void delete() ;
- void review() ;
- void quit() ;
- //void enter() , delete() , review() , quit() ; int menu();
- void (*option[])() = {enter , delete , review ,quit} ;
- int main()
- {
- int i ;
- while()
- {
- i = menu();
- system("CLS"); //清屏函数 (*option[i])(); //调用函数,执行功能 system("PAUSE"); //等待输入 system("CLS");
- }
- }
- int menu()
- {
- char select[] = {"1234EDRQedrq"};
- char*p , ch ; //定义数组指针应与数组数据类型一致 printf("1:Enter\n");
- printf("2:Delete\n");
- printf("3:Review\n");
- printf("4:Quit\n");
- printf("Please select a number :");
- while(!(p = strchr(select , ch = getchar()))) //将找到的字符地址赋给指针变量p
- // 若没找到则 p 返回 '\0' 即 NULL , 非P 为真 执行 下列语句 {
- putchar('\a'); // 产生响铃声 printf("%c\b" , ch); //退格回显 }
- return((p - select) %) ; // 返回值只可能为 0 ,1 ,2 ,3 }
- void enter()
- {
- printf("In enter()");
- }
- void delete()
- {
- printf("In delete()");
- }
- void review()
- {
- printf("In review()");
- }
- void quit()
- {
- printf("In quit()");
- exit() ; //函数exit()使程序立即正常终止 , 通常 ,状态值 status 为 0 表示正常终止
- //status 为 非 0 时 为出现错误后终止程序 }

C语言——指向函数的指针的更多相关文章
- C语言 指向函数的指针
#include <stdio.h> int sum(int a, int b) { int c = a + b; printf("%d + %d = %d\n", a ...
- C语言指向函数的指针
定义形式:类型 (*指针变量名)(参数列表); 例如:int (*p)(int i,int j); 在这里 int是函数的返回类型,*p是指向函数的指针,(int i,int j);是函数的参数 注意 ...
- 【C语言】14-返回指针的函数与指向函数的指针
前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如 ...
- 【C语言】-返回指针的函数与指向函数的指针
本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.i ...
- C语言基础语法之指向函数的指针
指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...
- C语言中 指向函数的指针 简介
引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了. char * fump(); //返回指向char的指针的函数 char (* ...
- 【学习笔记】【C语言】指向函数的指针
每个函数都有自己的内存地址,指针保存了函数的地址后就能指向函数了. #include <stdio.h> double haha(double d, char *s, int a) { } ...
- 12-返回指针的函数&&指向函数的指针
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...
- 指向函数的指针与iOS-Block相关知识
指向函数的指针与iOS-Block相关知识 一. 函数指针的定义和调用: 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/ ...
随机推荐
- dataTables设置下拉滚动出现表头挤在一起的解决方法
1.引入datatable的CSS文件 <link href="http://cdn.datatables.net/1.10.15/css/jquery.dataTables.min. ...
- Javascript简单特效及摘要
1.js中的Element对象 ** var input1=docuemnt.getElementById("input1"); //alert(input1.value); // ...
- Python的输入和输出问题详解
输出用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print('hello, world') pr ...
- C语言指针篇(二)多级指针
多级指针 多级指针常常使用于数组.这里仅仅介绍一下它长什么样,后文会再次详细对比使用. 多级指针呢,常见的有二级指针.见图. 二级指针的 ...
- 总结 Date 2017.09.23
总结 Date 2017.09.23 <1>统计数字 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计 ...
- python ranndom模块及生成验证码
python的random模块用于生成随机数,下面介绍一下random模块的常用方法: 取随机小数: 数学计算 random.random() 用于生成一个0-1的随机浮点数 0<=n<1 ...
- Response响应工具类
技术交流群: 233513714 import com.google.common.base.Objects; import java.io.Serializable; public class Re ...
- SDWebImage实现原理(怎么实现图片缓存器)
入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处 ...
- oracle集群部署相关文章
1. Oracle数据库HA架构方案介绍:http://blog.sina.com.cn/s/blog_7273b6cc0100p0sr.html 2.Oracle 集群概念和原理
- lintcode
public class Solution { /** * @param s: The first string * @param b: The second string * @return tru ...