了解一下函数指针概念,其实一个函数名就是一个指针,可以将它付值给其他指针。
如:
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)都可以
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)