c语言声明一个函数指针 声明一个函数指针数组

C语言中的函数指针

函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

创新互联建站成都企业网站建设服务,提供成都网站制作、网站建设网站开发,网站定制,建网站,网站搭建,网站设计,成都响应式网站建设公司,网页设计师打造企业风格网站,提供周到的售前咨询和贴心的售后服务。欢迎咨询做网站需要多少钱:18980820575

int func(int x); /* 声明一个函数 */

int (*f) (int x); /* 声明一个函数指针 */

f=func; /* 将func函数的首地址赋给指针f */

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

注2:函数括号中的形参可有可无,视情况而定。

下面的程序说明了函数指针调用函数的方法:

例一、

#includestdio.h

int max(int x,int y){ return(xy?x:y); }

void main()

{

int (*ptr)(int, int);

int a,b,c;

ptr=max;

scanf("%d%d",a,b);

c=(*ptr)(a,b);

printf("a=%d,b=%d,max=%d",a,b,c);

}

ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心。

指针函数是指返回值是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。

其定义格式如下所示:

返回类型标识符*返回名称(形式参数表)

{ 函数体}

返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。

其实还是指针,只是指向的内容和声明方法不同而已

C语言-函数指针

/*

函数指针,关键是后面两个字“指针”,顾名思义,是一个指向函数的指针

原理:函数在创建好了后,函数的代码会在内存中占有个位置,这时我们创造一个指针来指向这个地址,这个指针就叫函数指针

函数指针不可以移动,想要移动指针的位置来指向函数的下一个指令的想法是错误的

函数指针的要求,

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;

}

c语言中函数指针是什么 有什么用 举个实例

函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。

函数指针有两个用途:调用函数和做函数的参数。

函数指针的声明方法为:

返回值类型 ( * 指针变量名) ([形参列表]);

如:

int func(int x); /* 声明一个函数 */

int (*f) (int x); /* 声明一个函数指针 */

f=func; /* 将func函数的首地址赋给指针f */

或者使用下面的方法将函数地址赋给函数指针:

f = func;

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

下面的程序说明了函数指针调用函数的方法:

#includestdio.h

int max(int x,int y){return (xy? x:y);}

int main()

{

int (*ptr)(int, int);

int a, b, c;

ptr = max;

scanf("%d%d", a, b);

c = (*ptr)(a,b);

printf("a=%d, b=%d, max=%d", a, b, c);

return 0;

}


当前名称:c语言声明一个函数指针 声明一个函数指针数组
本文地址:http://scyanting.com/article/dopejgo.html