C++函数指针

函数指针是指向函数的指针变量,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。

int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。


#include <string.h>  
#include <stdio.h>  
typedef int* PINNT;
#define PP int*  

int funcA(int a, int b);
int funcB(int* a, int *b);
void funD();
int  main(int argc, char *argv[])
{
	int(*func)(int , int );
	//func = &funcA;  
	func = funcA;
	//两种赋值给函数指针的方法都可以  
	printf("%d\n", func(1, 10));
	//printf("%d",(*func)(1,10));  
	//两种调用函数指针的方法都可以  
	//两种赋值方法和两种调用方法可以任选一种组合  
	void(*funF)();
	funF = funD;
	funF();

}

int funcA(int a, int b)
{
	return a + b;
}

int funcB(int* a, int *b)
{
	(*a) = (*a) + (*b);
	return 1;
}

void funD()
{
	printf("test\n");
}
下面看一个华为的面试题目,结果为110:

#include <stdio.h>  

int   inc(int   a)
{
	return(++a);
}

int   multi(int*a, int*b, int*c)
{
	return(*c = *a**b);
}

typedef   int(FUNC1)(int);
typedef   int(FUNC2)(int*, int*, int*);

void   show(FUNC2   fun, int   arg1, int*arg2)
{
	FUNC1   *p = &inc;
	int   temp = p(arg1);
	fun(&temp, &arg1, arg2);
	printf("%d\n ", *arg2);
}

int main()
{
	int   a;
	show(multi, 10, &a);
	getchar();
	return   0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值