`
cm14k
  • 浏览: 30665 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

指向函数的指针

J# 
阅读更多

指向函数的指针是一个指针变量,它指向一个函数。一个函数名是一个指针,它指向函数的代码。函数的调用可以通过函数名,也可以通过指向该函数的指针。

指向函数的指针其定义的一般形式为:

类型名  (*指针变量名)();

例如:

int (*p)(int i, int j);

p是一个指针,它指向一个函数,该函数有两个整型参数,返回类型为int .

 

注:

int *p(int i, int j);

这是一个函数声明,返回类型为int型指针。

 

1、函数指针的简单使用:

//函数指针的使用
#include <stdio.h>

#define GET_MAX 0
#define GET_MIN 1

int get_max(int i, int j)
{
	return i > j ? i : j;
}

int get_min(int i, int j)
{
	return i < j ? i : j;
}

int compare(int i, int j, int flag)
{
	int result;
	int (*p)(int, int);			//函数指针

	if (flag == GET_MAX)
	{
		p = get_max;
	}
	else
	{
		p = get_min;
	}
	result = p(i, j);

	return result;
}

int main(void)
{
	int i = 5, j = 10, result;
	
	result = compare(i, j, GET_MAX);
	printf("The MAX is %d", result);
	
	return 0;
}

 注意:

(1)不能对指向函数的指针作任何运算,如:p++ , p--, 等。

(2)指向函数的指针能通过同类型的函数(参数相同,返回值相同)名、函数指针、NULL来初始化或赋值。NULL表示该指针不指向任何函数。

 

2、函数指针作形参

#include <stdio.h>

int get_big(int i, int j)
{
	return i > j ? i : j;
}

int get_max(int i, int j, int k, int (*p)(int, int))	//函数指针作形参
{
	int ret;

	ret = p(i, j);
	ret = p(ret,k);

	return ret;
}

int main(void)
{
	int i = 5;
	int j = 10;
	int k = 15;
	int ret;

	ret = get_max(i, j, k, get_big);
	printf("The MAX is %d", ret);
	
	return 0;
}

 

3、返回函数指针的函数

#include <stdio.h>

int get_big(int i, int j)
{
	return i > j ? i : j;
}

int (*get_func(int a))(int , int)   //返回函数指针的函数
{
	printf("The number is %d", a);
	return get_big;
}

int main(void)
{
	int i = 5, j = 10, max;
	int (*p)(int , int);
	p = get_func(100);
	max = p(i, j);
	printf("MAX is %d", max);

	return 0;
}

 

get_func(int a)是有一个整型参数的函数。它的返回值为 int(*)(int , int)  即返回一个指向函数的指针,该指针所指函数有两个整型参数。

分享到:
评论

相关推荐

    指向函数的指针运用

    运用指向函数的指针实现一个通用函数调用两个函数,显示两个不同结果。 两个函数的作用是求两个不同的不定积分。

    函数指针就是指向函数的指针;类成员方法指针,类具有类域操作符

    函数指针,就是指向函数的指针。在C++中,函数指针一般是指全局命名空间中的函数指针,类成员函数指针,与函数指针不同的是,类具有类域操作符,在声明类成员函数指针的时候,要指定成员函数返回值类型、类域操作符...

    函数指针和指针函数的理解

    我知道函数指针是指向函数的指针,指针函数还是指一个函数的返回值是一个指针,但下面 的几道题还是感觉很迷惑。各位能否讲的详细点呢? (1)float(**def)[10] def是什么? (2)double*(*gh)[10] gh是什么? (3)double...

    指向函数的指针精心学习

    面试被问到,指向函数指针 指针函数 数组指针 指针数组 函数指针数组。理理清楚。

    C++对象和指针的引用

    &lt;类型说明符&gt;*&lt;指向函数指针名&gt;(&lt;参数表&gt;) 关于给指向函数的指针赋值的格式如下: &lt;指向函数的指针名&gt;=&lt;函数名&gt; 关于在程序中,使用指向函数的指针调用函数的格式如下: (*&lt;指向函数的指针名&gt;)(&lt;实参表&gt;) ...

    c++中指向函数的指针

    定义指向函数的指针,这种指针可以被赋值...

    指针函数和函数指针 C++代码

    指针函数和函数指针是C语言里两个比较绕的概念。但是不仅面试题爱考,实际应用中也比较广泛。很多人因为搞不清这两个概念,干脆就避而远之,我刚接触C语言的时候对这两个概念也比较模糊,特别是当指针函数、函数指针...

    C++类成员函数指针2

    1.普通函数指针指向普通函数 2.普通函数指向非静态成员函数 3. 类外部的 类函数指针 指向普通函数 4. 类外部的 类函数指针 指向成员函数 5. 类内部的 函数指针 指向成员函数 (类似于第2条) 6. 类内部的 函数指针 ...

    详解函数指针和指针函数

    详解函数指针和指针函数 函数类型 (*指针变量名)(形参列表); “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的...

    C语言程序设计-指针与函数.pptx

    指针与函数 4-1 函数型指针变量的定义 在C语言程序中,函数定义了之后,...函数指针调用函数时,用(*pf)代替原函数名。 指向函数的指针变量pf,如果作pf±n,pf++,pf--运算,则没有意义。 4-2 函数型指针的赋值 【例8.

    C语言函数指针.doc

    一、函数指针的定义 顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * ...

    C++指向函数的指针实例解析

    通常来说C++函数指针是指指向函数的指针,而非指向对象的指针。就像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。 定义: char (*fP)(char,int); ...

    一般函数指针和类的成员函数指针深入解析

    函数指针是通过指向函数的指针间接调用函数。函数指针可以实现对参数类型、参数顺序、返回值都相同的函数进行封装,是多态的一种实现方式。由于类的非静态成员函数中有一个隐形的this指针,因此,类的成员函数的指针...

    指针函数和函数指针有什么区别.txt

    让大家明白指针函数和函数指针的区别 学C++的都哦那个一被这两个东西弄糊涂了

    C++学习笔记--函数指针

    C++学习笔记--函数指针 函数指针 程序运行期间。每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址(也称“入口地址”)。...这种指向函数的指针变量,就叫做“函数指针”

    指向函数的指针.zip

    指向函数的指针

    C++普通函数指针与成员函数指针实例解析

    C++的函数指针(function pointer)是通过指向函数的指针间接调用函数。相信很多人对指向一般函数的函数指针使用的比较多,而对指向类成员函数的函数指针则比较陌生。本文即对C++普通函数指针与成员函数指针进行实例...

    AVR-GCC如何调用存储于Flash中的指向函数的指针

    本文给大家分享了AVR-GCC如何调用存储于Flash中的指向函数的指针。

    C++成员函数指针的应用

    C++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该...本文引导你了解成员函数指针的声明,赋值和调用回叫函数。

Global site tag (gtag.js) - Google Analytics