转载自: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语言——指向函数的指针的更多相关文章

  1. C语言 指向函数的指针

    #include <stdio.h> int sum(int a, int b) { int c = a + b; printf("%d + %d = %d\n", a ...

  2. C语言指向函数的指针

    定义形式:类型 (*指针变量名)(参数列表); 例如:int (*p)(int i,int j); 在这里 int是函数的返回类型,*p是指向函数的指针,(int i,int j);是函数的参数 注意 ...

  3. 【C语言】14-返回指针的函数与指向函数的指针

    前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如 ...

  4. 【C语言】-返回指针的函数与指向函数的指针

    本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.i ...

  5. C语言基础语法之指向函数的指针

    指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...

  6. C语言中 指向函数的指针 简介

    引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了. char * fump(); //返回指向char的指针的函数 char (* ...

  7. 【学习笔记】【C语言】指向函数的指针

    每个函数都有自己的内存地址,指针保存了函数的地址后就能指向函数了. #include <stdio.h> double haha(double d, char *s, int a) { } ...

  8. 12-返回指针的函数&&指向函数的指针

    前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针   一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...

  9. 指向函数的指针与iOS-Block相关知识

    指向函数的指针与iOS-Block相关知识 一. 函数指针的定义和调用: 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/ ...

随机推荐

  1. JDK1.8简单配置环境变量---两步曲

    鄙人最近重新装完系统之后,在安装和配置jdk1.8的时候,发现网上许多教程配置jdk环境变量时都还在沿用传统的方式配置,但是随着技术的更新,完全没有必要那么麻烦了. 下载和安装jdk的教程,在这里就不 ...

  2. 汇编:1位16进制数到ASCII码转换

    ;============================ ;1位16进制数到ASCII码转换 ; { X+30H (0≤X≤9) ;Y= { ; { X+37H (0AH≤X≤0FH) DATAS ...

  3. 【Python 2 到 3 系列】 print 是函数

    v3.0 以前,print一直作为语法结构存在,他是python语法的一部分:这个理解起来可能有点蹩脚,但的确是这样. print 一直被定以为一个statement,也就是说,他跟return/tr ...

  4. python的运行过程剖析·编程语言分类

    总结: 编程语言的分类 编译型: 说明:与汇编语言类似,都有一个编译程序将源代码编译成硬件可执行的二进制代码 特点:执行速度快.同等情况下对系统要求低,适合于开发大型应用程序.数据库系统.操作系统等 ...

  5. python 函数复习

    # 函数 # 可读性强 复用性强 # def 函数名(): # 函数体 #return 返回值 # 所有的函数 只定义不调用就一定不执行 #先定义后调用 #函数名() #不接收返回值 #返回值 = 函 ...

  6. 教你一步学会安装Hue

    一.简介 hue是一个开源的apache hadoop ui系统,由cloudear desktop演化而来,最后cloudera公司将其贡献给了apache基金会的hadoop社区,它基于pytho ...

  7. str_replace字符串替换

    字符串替换, src 源字符串, buf_size 缓冲大小, search搜索的字符串大小, repstr 需要替换成的字符串 int str_replace(char *src, unsigned ...

  8. UR官网特效

    <!DOCTYPE html>                              <!--申明文档类型:html--> <html lang="en&q ...

  9. 什么是App加壳,以及App加壳的利与弊

    非著名程序员涩郎 非著名程序员,字耿左直右,号涩郎,爱搞机,爱编程,是爬行在移动互联网中的一名码匠!个人微信号:loonggg,微博:涩郎,专注于移动互联网的开发和研究,本号致力于分享IT技术和程序猿 ...

  10. webstrom11 vue插件配置

    直接上图 1. 安装vue插件 2.添加模板 3.指定模板类型 最新的是插件 是 vue.js 创建完 Vue File 文件后 需要在 下面这里关联一下