C语言中指针函数和函数指针

指针函数

指针函数: 顾名思义,它的本质是一个函数,不过它的返回值是一个指针。

如下声明方式:

ret *func(args, ...);

下述代码就是指针函数的例子:

#include <stdio.h>



//指针函数
int *fun_sum(int n)
{
	static int sum = 0;
	int *p;
	int i;
	
	for(i=0;i<=n;i++)
	{
		sum += i;
	}
	
	p = &sum;
	return p;
}

int main()
{
	int num = 3;
	int *sumP;
	sumP=fun_sum(num);
	printf("sum求和结果:%d\n", *sumP);
	return 0;
}

上述代码中 int *fun_sum(int n) 就是一个指针函数,其功能很简单,就是自然数求和,其结果通过指针的方式返回给调用方,指针函数中用到了static去修饰变量,如果不用static修饰静态变量,结果就会出错,原因就是静态变量和局域变量的生命周期不一样,具体可以看下静态变量和局域变量的区别,因此,在使用指针函数的时候,一定要避免出现返回局部变量指针的情况。

函数指针

与指针函数不同,函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针。
我们知道,函数的定义是存在于代码段,因此,每个函数在代码段中,也有着自己的入口地址,函数指针就是指向代码段中函数入口地址的指针。
其声明形式如下所示:

ret (*p)(args, ...);

例子如下:

#include <stdio.h>

//函数指针

int max(int m,int n)
{
	return m > n ? m : n;
}

int main()
{
	int (*p)(int a,int b);	//函数指针的定义 *p必须()括起来
	
	p = max;	//函数指针的初始化 函数名字就是函数的地址,类似数组名就是数组的首地址
	
	int max_num = p(5, 8);	//函数指针的调用
	printf("max_num = %d \n", max_num);
	
	return 0;
}

 可以看下篇练习demo深入理解: C语言指针函数,函数指针练习demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值