新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
01
创新互联服务紧随时代发展步伐,进行技术革新和技术进步,经过10余年的发展和积累,已经汇集了一批资深网站策划师、设计师、专业的网站实施团队以及高素质售后服务人员,并且完全形成了一套成熟的业务流程,能够完全依照客户要求对网站进行网站建设、网站设计、建设、维护、更新和改版,实现客户网站对外宣传展示的首要目的,并为客户企业品牌互联网化提供全面的解决方案。
指针函数通常是指函数返回值是指针的一类函数,如图所示。
02
函数指针是指指向某个具体函数的指针变量,在程序设计时可以用来调用某个特定函数或者做某个函数的参数。其形式一般如图:
03
指针函数与函数指针本质上的区别是,指针函数是一个带指针的函数,总的来说还是一个函数,如图就是一个带*name指针的函数
04
函数指针是指向函数的指针变量,本质上还是一个指针,其格式如下,可以看到和指针函数的格式非常像,所以一定要用心留意。
/*
函数指针,关键是后面两个字“指针”,顾名思义,是一个指向函数的指针
原理:函数在创建好了后,函数的代码会在内存中占有个位置,这时我们创造一个指针来指向这个地址,这个指针就叫函数指针
函数指针不可以移动,想要移动指针的位置来指向函数的下一个指令的想法是错误的
函数指针的要求,
1,首先这个指针,要和函数的返回类型一样
2,指针的*和名字,要用小括号括起来//不括起来就是指针函数了,意思就变成,函数返回一个指针了
3,最右边的小括号里形参位置的类型,形参的个数,也要和函数定义时的形参一致,只要类型,不要形参名即可,
但是加上形参名也可以,没毛病,看上去也更清晰
*/
#include
void swapchar(char *a, char *b)
{
char t;
t = *a;
*a = *b;
*b = t;
}
void swapchar2(char * a2, char * b2)
{
printf("this is swapchar2");
}
int main(void)
{
char chf = 'a', chg = 'j';
void(*p)(char * a, char * b);//定义函数指针、形参名字a、b可有可无,但有的话看上去更清晰,只要函数定义的类型、参数类型、以及参数个数,与这个指针一致,那么这个指针p,就可以指向它
p = swapchar;//p指针接管swapchar函数,只要给函数名字,就可以给过去了
printf("chf=%c,chg=%c ", chf, chg);
p(chf, chg);
printf("chf=%c,chg=%c ", chf, chg);
p = swapchar2;//这里把swapchar2函数的地址,给了p,这时p从swapchar地址,转移到了swapchar2这里。
p(chf,chg);
return 0;
}
这样说吧:
有2个箱子,编号分别是a,b,a装了一个苹果,b装了一个梨子,
有2张纸,编号分别是p,q,p纸上写着a,q纸上写着b。
1、现在我准备一张白纸,编号为t,把p纸上写的a抄到t上,然后擦掉p纸上的a,写成b;把q纸上的b摖掉,然后把t纸上写的a抄到q纸上,那苹果和梨子交换了吗?
2、现在我准备一个空箱子,编号为t,根据p纸上写的箱子编号a,把a箱子中的东西取出并放到箱子t,根据q纸上写的箱子编号b,把b箱子中的东西取出并放到p纸上写的箱子a中,然后把t箱子中的东西取出放到q纸上写的箱子b中,苹果和梨子交换了吗?
在C语言中指针函数和函数指针是两个不同的概念,不能混淆。
指针函数本质上是函数,是一个返回类型为指针的函数,如:
int* max(int *array,int n)
{
//找最大值的地址
return 最大值的地址;
}
max就是一个指针函数。
而函数指针本质上是指针,是指向函数的指针,如:
int (*funp)(int a,int b);
funp就是一个函数指针,可以用它指向一个返回类型为int、有两个int类型的参数的函数。