现在的位置: 首页 > 编程语言 > 正文

c/c++基础(八) 函数指针

2019年09月13日 编程语言 ⁄ 共 1100字 ⁄ 字号 评论关闭

指向函数的指针:

       一个函数在编译时被分配一个入口地址,这个函数的入口地址被称为函数的指针。

     与数组名代表数组首元素地址类型,函数名代表该函数的入口地址。

     定义形式如下:

    数据类型 (*指针变量名)(函数参数列表)

    

   注意:

1.int (*p)(int ,int ) 表示定义一个指向函数的指针变量p,它不是固定指向哪一个函数,而只是表示定义了这样一个类型的变量,它是专门来存放函数的入口地址的,在程序中把哪一个函数(该函数的值是整型的,且有两个整型参数)的地址赋给它,它就指向哪一个函数。在一个程序中,一个指针变量可以先后指向同类型的不同函数。


2.给函数指针变量赋值时,只需要给出函数名,不需要给出参数

如p=max;


3.用函数指针调用函数时,只需要将(*p)代替函数名即可,在(*p)之后的括号中根据需要写上实参。

如:c=(*p)(a,b)


4.对函数指针变量进行p+n,p++,p--等运算是无意义的



代码例子:


// CppTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

int max(int x,int y);
int min(int x,int y);
int sub(int x,int y);
int call(int x,int y,int (*p)(int x,int y));

int _tmain(int argc, _TCHAR* argv[])
{
	cout<<"max:"<<call(5,10,max)<<endl;
	cout<<"min:"<<call(5,10,min)<<endl;
	cout<<"sub:"<<call(5,10,sub)<<endl;

	//cout<<"----------------------------"<<endl;

	//int (*p)(int ,int);
	//p=max;
	//cout<<"max:"<<(*p)(5,10)<<endl;
	//p=min;
	//cout<<"min:"<<(*p)(5,10)<<endl;
	//p=sub;
	//cout<<"sub:"<<(*p)(5,10)<<endl;

	return 0;
}

int max(int x, int y)
{
	if (x>y) 
	{
		return x;
	}
	return y;
}

int min(int x, int y)
{
	if (x>y) 
	{
		return y;
	}
	return x;
}

int sub(int x, int y)
{
	return x+y;
}


int call(int x,int y,int (*p)(int x,int y))
{
	return (*p)(x,y);
}

打印结果如下:



抱歉!评论已关闭.