189 8069 5689

c语言中函数指针的实现,函数指针 c语言

C语言函数指针怎么用?

有函数: 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)都可以

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语言中函数指针用法

在C语言中,指针被广泛使用,而函数指针是最为高级的用法之一,也是容易疑惑的地方之一。看下面这段代码:#include stdio.hvoid F(int a, int* output)

{

printf("a = %d\n", a);

*output = a + 1;

}typedef void (*FUNC)();int main()

{

FUNC f = F;

int ret = 0;

f(3, ret);printf("ret = %d\n", ret);

return 0;

}上面看出 FUNC 的类型是与F的类型不匹配的,这样可以通过编译吗?答案是: 可以的。由于在C语言中编译函数的时候,是仅仅将其函数名作为该函数的

唯一标识,为其分配相应地址。所以虽然FUNC 与 F的类型不一致,但是对于编译器看来

都是两个地址,是无所谓的。用上面的特点,可以写出非常通用的函数指针类型,typedef int (*FUNC)(); 这里之所有要有返回值,是用来标识该函数是否执行成功的错误代码标志。 随说做了有一段时间的C了,但尽然没有搞明白函数指针的用法,见到了也没有好好研究,今天终于有时间了,在网上搜了一下,终于弄懂了.原来就是定义了一个指针变量,只不过形式有点怪罢了.其实还是当成指针用就行了!一般有两种用法:1定义函数指针int (*functionPoint)(int, int)----这只是定义了一个指向函数的指针int a(int a,int b)----------------这是与之相符的函数原型void main()-----------------------使用{ functionPoint = a;------------先赋值 functionPoint(1,2);----------调用

}2用typedef定义使用typedef int (*functionPoint)(int,int);----------定义了一种类型名为functionPoint的指针int a(int a, int b)-----------------------------函数原型void main(){ functionPoint fun;---------------------------定义指针 fun = a;-------------------------------------赋值 fun(1,2);---------------------------------使用

}函数就是这个函数的指针.

C语言; 编写一个函数,用指针方法实现功能

int find(char* source/*源串*/, char* target/*子串*/)//找到返回在源串中的位置,未找到返回-1,如果要改为找到返回1,把return i改为return 1;

{

int i,j;

int s_len=strlen(source);

int t_len=strlen(target);

if(t_lens_len)

{

return -1;

}

for(i=0;i=s_len-t_len;i++)

{

j=0;

int flag=1;

if(source[i]==target[j])

{

int k,p=i;

for(k=0;kt_len;k++)

{

if(source[p]==target[j])

{

p++;

j++;

continue;

}

else

{

flag=0;

break;

}

}

}

else

{

continue;

}

if(flag==1)

{

return i;

}

}

return -1;

}

c语言的函数指针举个例子

函数指针告诉CPU下一步需要执行哪里的代码的指针, 一数组十分相像.

#include stdio.h

void function(int i, double d)    //一个函数的声明

{

printf("函数运行, %d, %lf\n", i, d);

}

void AnotherFunction(int i, double d)    //另外一个函数声明

{

printf("又一个函数运行, %d, %lf\n", i, d);

}

int main()

{

void (*pFun)(int, double);    //定义了一个函数指针

int (*p)(int , double);    //用于调试的函数指针

pFun = function;    //让这个函数指针指向第一个函数

pFun(10, 10.101);    //通过这个函数指针来调用第一个函数

pFun = AnotherFunction;    //让这个函数指针指向第二个函数

pFun(20, 20.202);    //通过这个函数指针来调用第二个函数

//若将以下代码取消注释, 就会产生错误

/*

p = function;

p = AnotherFunction;

//原因很简单, 因为p是必须指向一个返回值为int, 第一个参数为int, 第二个参数为double的函数, 但是在此代码中定义的函数返回值是void

*/

//这个实验中, 直接用函数名来赋值了, 是因为函数名其实就是这个函数的指针

//而在平常调用函数时, 都要加上(), 如:printf("");

//这里, "()"就相当于'*'(就是取值运算符), printf是函数指针, 就相当于是数组名, 即数组的首地址

return 0;

}


分享文章:c语言中函数指针的实现,函数指针 c语言
标题路径:http://cdxtjz.cn/article/dsceooj.html

其他资讯