关于函数指针调用函数

关于函数指针调用函数,第1张

了解一下函数指针概念,其实一个函数名就是一个指针,可以将它付值给其他指针。

如:

int

a

=

100;

int

func(int

x);

/

声明一个函数

/

int

(f)

(int

x);

/

声明一个函数指针

/

f=func;

/

将func函数的首地址赋给指针f

/

(f戚梁纶梦璜缕络债盲泉)(a);

/执行/

直接用函数名调用可读性好一点,如果想写一个通用一点的方法来处理不同的函数,则调用不同函数的地方需要多次类似重复地使用不同的函数去调用。函数指针就可以避免这个问题,不管是普通调用或者是形参,只要参数类型和返回值一致即可,不必重复使用函数名,尤其是函数指针数组更是使用得广泛,比如虚函数表就是这样一个函数指针数组。

#include<stdioh>

int d_bubblesort(int a[],int n)//数组长度为n的冒泡降序排序

{

int i,j;

int temp;

for(i=0;i<n;i++)

{

for(j=n-1;j>i;j--)

{

if(a[j]>a[j-1])

{

temp=a[j-1];

a[j-1]=a[j];

a[j]=temp;

}

}

}

return a;

}

void main()

{

int i;

int p=NULL;

int a[10]={6,5,4,1,2,3,9,8,7,10};

int (fun)(int,int);

fun=d_bubblesort;

p=fun(a,10);

for(i=0;i<10;i++)

{

printf("%d\t",p[i]);

}

}

调用函数 需要使用 函数指针啊,

函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。

函数指针的声明方法为:

函数类型 (标志符指针变量名) (形参列表);

注1:“函数类型”说明函数的返回类型,“(标志符指针变量名 )”中的括号不能省,若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:

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

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

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

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

一、定义一个函数指针的方法如下:

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

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

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

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

二、函数指针的用法:

函数指针的应用:(指针变量名)(参数列表)

如:int c=(ptr)(a,b);/ 函数指针 的使用/

在C语言中,函数本身不是变量,但是可以定义指向函数的指针,也称作函数指针,函数指针指向函数的入口地址。这种类型的指针可以被赋值、存放在数组中、传递给函数以及作为函数的返回值等等。 

扩展资料:

指针函数和函数指针的区别:

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

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

-指针

-函数指针

有函数: int fun(int a,int b);

要定义指向该函数的指针

对比指向 int a; 的指针

int p; p = &a;

p的定义是怎么来的?

首先要保证p是一个指针类型

写下(p),

然后,考虑下p的基类型,

p的基类型就是变量a的类型int

将int 放在(p)前面就行了

int (p);

括号可以省略,就成了 int p;

同理

想要实现 pf = &fun;

(pf) 将pf定义为一个指针,

将fun的类型作为pf的基类型

fun相当于一个 int (int a,int b)类型的量

int (int a,int b) (pf);

基类型中有圆括号和中括号要后移

int (pf)(int a,int b) ;//括号不能省略

pf = &fun;

调用时

(pf)(3,4); pf(3,4)都可以

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12182262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存