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

作者&投稿:镇茜 (若有异议请与网页底部的电邮联系)
c语言的函数指针举个例子~

函数指针告诉CPU下一步需要执行哪里的代码的指针, 一数组十分相像.
#include void function(int i, double d) //一个函数的声明{ printf("函数运行, %d, %lf
", i, d);}void AnotherFunction(int i, double d) //另外一个函数声明{ printf("又一个函数运行, %d, %lf
", 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;}

函数指针 就是指向函数的指针
比如
void pr_int(int a)//函数{ printf("%d
",a);}void func(void (*p)(int), int m)//函数指针做参数{ p(m);//调用函数指针}int main(){ func(pr_int, 100); return 0;}

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

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


函数指针的声明方法为:

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

如:

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

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

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

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

f = &func;

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

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

#include<stdio.h>
int max(int x,int y){return (x>y? 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;
}


函数指针指函数的入口地址,作用就是跳转。比如设置回调函数,线程函数、结构体中的成员函数等。

回调:

typedef void (WINAPI *USBCALLBACK)(bool,bool);//回调函数
……
USBCALLBACK pCallBack;
  
 void SetCallBack(USBCALLBACK USBCallBack)//回调,指定设备接入或拔出
{
     pCallBack=USBCallBack;
}

线程

DWORD WINAPI DataHandleThread(LPVOID lParam)//处理数据线程
{
    //TODO: 
}  
……
m_hDataHandle=CreateThread(NULL,0,DataHandleThread,this,0,NULL);//启动线程

结构体

typedef struct LUNARHANDLE
{
    bool (*GetLunar)(int iYear,int iMonth,int iDay,LUNARDATE* lunardate); 
};

以上这几种用法都摘自我自己的项目,请参考。



比如C++中的快排函数qsort, 的最后一个函数就是函数指针 compare, 这个函数决定了排序是从小到大,还是从大到小
int (*compare)(void *a, void*b);
然后咱们定义下面两个函数:
int Ascending(void *a, void *b){ //

return (int *)a < (int*)b;
}
int Descending(void *a, void *b){
return (int *)a > (int*)b;
}

在调用qsort(int a[], N,sizeof(int), Ascending);就是升序。

而qsort内部实现过程中,对于数组元素之间的比较,都是使用的compare函数指针完成的。

从这个例子可以看出,函数指针,增加了代码的灵活性和复用性(为了升序和降序,不用写两个版本的qsort)

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

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

函数指针的声明方法为:

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

如:

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

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

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

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

f = &func;

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

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

#include<stdio.h>int max(int x,int y){return (x>y? 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;}

用户1103525589826747
0粉丝 · 9赞
搜索
c语言培训班大约多少钱
编程必背50个程序
如何自学编程
c语言必背100行代码
免费自学编程全套课程
编程必背的100个程序


c语言中的指针是什么?
表示成员选择(指针),选择结构体的成员变量。1、结构:运算符 -> 是指向结构体成员运算符,结合方向为自左向右。2、用法:对象指针->成员名。举例说明如下:

C语言的指针是什么
2。指针所指向的类型。当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:(1)int *ptr; \/\/指针所指向的类型是int(2)char *ptr; \/\/...

c++的函数指针是怎么用的呀?
2. 语法 指向函数的指针变量的一般定义形式为:数据类型 (*指针变量名)(参数表);3. 说明 1) 函数指针的定义形式中的数据类型是指函数的返回值的类型。2) 区分下面两个语句:int (*p)(int a, int b); \/\/p是一个指向函数的指针变量,所指函数的返回值类型为整型 int *p(int a, int...

函数指针如何定义?
用函数指针变量调用函数可以用指针变量指向整形变量、字符串、数组、结构体、也可以指向一个函数。一个函数在编译时被分配一个入口地址。这个入口地址就称为函数指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。函数指针是一种在C、C++、D语言、其他类 C 语言和Fortran 2003中的指针。

C语言 指针函数 函数指针 什么区别联系?最好有例子?一定采纳
函数指针的声明形式是T (*p)(...),其中*p使用括号括起来的原因是函数类型解析的优先级高于指针的解析,故使用括号防止解析成上面的指针函数(其实这两个之间就相差了一对括号)。函数指针可以绑定到与其返回值和参数类型都相同的函数上。比如:int foo(int, double); \/\/ 函数声明int (*bar)(int,...

c++语言指针是什么
1.1指针的概念 谈到指针,它的灵活性和难控制性让许多程序员谈虎色变;但它的直接操作内存,在数据 操作方面有着速度快,节约内存等优点,又使许多C++程序员的深爱不以.那么指针究竟是怎么样一个概念呢?其实, 指针就是一类变量,是一类包含了其他变量或函数的地址的变量。与其他变量所不同的是,一般...

C语言:指针函数跟函数指针的区别
一个是函数 一个是指针变量 1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表)int *f(x,y);2、函数指针是指向函数的指针变量,即本质是一个指针变量。int (*f) (int x); \/* 声明一个函数指针 *\/ f=func; \/* 将func函数的...

指针的定义是什么?
1. 指针的定义 在计算机科学中,指针是一个变量或寄存器,用于存储内存地址。它们通常用于指示函数或变量的位置。指针在像汇编语言和C语言这样的接近机器语言的编程语言中很常见,而在像Java这样的面向对象语言中,则通常使用引用。2. 指针的基本概念 指针通常指向一个函数或变量。程序可以通过指针访问或...

c语言指针函数和函数指针有什么不同
如楼上所说 。指针函数 的本质是 函数 ,只是他的返回值 类型 是指针变量。比如 int * A(int num); 这就是一个 指针函数。函数指针 是一个 指针变量 ,只不过 他是 指向函数的 指针变量。比如 有函数定义 如上 int * A(int num); 再有 int (*pf)(int num);则是 pf = ...

指针的定义是什么?
1.基本概念 指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。在计算机语言中,由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为...

安龙县19142437512: C语言的指针有什么实际作用? -
豆卢乐林可: 指针实际上就是一个内存地址,比如一个函数指针,就是一个函数的入口地址,通过这个地址,系统就可以找到这个函数的位置并调用它.简单地说指针就是指向变量和对象的地址.指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递.还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率.以上还只是指针的初步应用,随着你在C++学习上的逐步深入,你会发现更多的用途的.

安龙县19142437512: c语言中函数指针是什么 有什么用 举个实例 -
豆卢乐林可: 函数指针是指向函数的指针变量. 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数.函数指针有两个用途:调用函数和做函数的参数.函数指针的...

安龙县19142437512: C语言中的函数指针 -
豆卢乐林可: 函数指针是定义一个指向函数的指针,形式为:void (*p)(void); 一般用法:int fun1(int x); int fun2(int x); char fun3(int x); int fun4(char x); int main(void) { int (*p)(int x);p=fun1; //指向fun1 p(2) //这时等价于fun1(2) p=fun2; //也可以指向fun2 . .但...

安龙县19142437512: 在C语言中什么是指针?指针是干什么用的?,有什么意义? -
豆卢乐林可: 写简单的程序的话不用指针也行了吧. 比如, int a = 2; int* p = &a; *p = 3; 这里a是一个地址(编译后), 为了读写这个地址单元里的东西,可以用p,也可以用一般变量a. 对于指针的便利,我现在能想到的,可能是: 函数A调用函数B时,把一...

安龙县19142437512: C语言里的指针是什么意思,起什么作用 -
豆卢乐林可: 1:指针是一个地址,指向的是个类型: 我们知道,c语言中的类型有int,char,bool(这个不常用),一般我们使用int,char就可以满足一般的类型需求的,如果对于变量的长度过大,就是用long ,float,double,关于各个类型使用的的长度问题,可以使...

安龙县19142437512: 求C语言中指针的用法 -
豆卢乐林可: 电脑程序中,不管是什么东西,他都对应有一个地址,而指针的作用是指向这个地址.例如int a=0; a的内容是0,但是在电脑中的内存地址就是其他,假如是2000,那么指针指向的就是这个2000的值.继续刚才的例子int *p;p=&a;这个时候p就指向了a的地址2000,如果想借助p来访问a,就需要在p前面添加上*号,如*p的内容就是0了,也是a的内容.

安龙县19142437512: C语言的指针,又什么用?能用通俗的话讲讲什么是指针吗?最好结合例子 -
豆卢乐林可: 在C语言中出现的数据都是存储在内存地址中的,为了方便的使用这些数据,我们定义了指针!例如:有这样一个整型变量:int a=1;int pointer=*a;那么pointer就是获得变量a使用权的引线!通俗的地说,指针就是指向地址空间的变量.当然,指针是很复杂的,比如高级的用法:指向指针的指针!不过指针使用不当会降低程序的可读性!指针最著名的用途就是有些函数,将实参传回,在修改形参的时候使得实际的结果改变!学好指针,对学好C语言,写出清晰的程序用处很大!在全国计算机等级考试二级考指针很多,但是三级上机和四级上机基本上不考了!

安龙县19142437512: C语言的指针有什么用?编程不一定要用指针吧?请高手指点一下. -
豆卢乐林可: 指针是值得重视的.编程不一定用指针,可以用数组.但是,对编程来说,一般指针就占用4个字节,保存某个变量、结构体甚至是函数的地址.程序运行,直接按地址跳转是非常快的,效率很高.比如:多个函数用到一个很大的数组,如果用这个数组的地址来传递信息,一是不用把整个数组传到其他地方(复制,浪费空间和时间),二是效率很高.在追求效率和空间的时候,就必须得考虑指针.如:嵌入式系统或者软件 总之,不要害怕指针,指针有指针的规律,刚开始学习,比较难懂,没关系,慢慢就熟悉了.编程就像数学,越练习,越能写出好的代码.希望对你有帮助.

安龙县19142437512: C 什么是函数指针,它有什么用?
豆卢乐林可: 函数指针就是一个指向某一类型函数的指针int (*p)(int,int); //p为指向返回int型,带两个int型参数的函数的指针int max(int a,int b){ return a

安龙县19142437512: C语言指针到底有什么用 -
豆卢乐林可: 所谓指针就是一个地址,它必须初始化才能使用,所谓初始化就是要指向一个目标.它的作用是,比如你在main函数里定义了一个const int a = 100,如果你想改变a的值,那么一般的办法就行不通了,这个时候就能用到指针了,你定义一个指针指向a,然后通过指针对a的空间进行操作达到改变a的目的.当然一般人是不会这样干的,这里只是为了说明指针的一个作用而已,指针能帮助你完成一些复杂的计算,用处很大.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网