扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
函数指针一般用来做回调的,一般多线程用的多,因为线程之间,栈空间不一样。还有就是封装好的程序,做回调的,比如我写了一段程序,想要给你用,如果我内部没有回调,你就要改动我的程序。但我这样写,我的执行过程是123,二这个步骤,我用函数指针封装起来,如果等于空就不执行,然后你来用,只需要把我的函数指针,指向你的函数,我这个程序是不是就可以不改代码,然后把你的代码加到中间了,所以,函数指针除了线程中,通过传递消息,根据消息相互调用,之外,也是封装的一大利器,如果管理的好,还可以减少代码雍种,写的好,增加可读性。当然你可以不用,也能开发同样效果的东西,难度要大很多,特别是代码到千行以上
创新互联建站服务项目包括长垣网站建设、长垣网站制作、长垣网页制作以及长垣网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,长垣网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到长垣省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
C里面函数都只能返回一个值,如果你的函数要返回两个值,那就要用指针了,把变量地址传进函数,然后把希望通过函数操作后想要的值存进传进来的变量地址里面。当然函数可以返回数组,结构体,但是你看多了你就知道,没有人会这么做的,都返回指针。试想如果我有一个1万个元素的数组,你会把它整个地传进一个函数里面或者整个地返回出来吗?C语言里面都是传值的,就是说传进函数的参数值首先被复制一边赋值给形式参数,你想想1万个元素,够呛咯!但是有指针就好多了,我们可以把指针(数组的第一个元素的地址)传进函数里面,有了开始地址,函数就知道东西在哪儿,就直接去那儿操作就可以了。单凭这一点,你就可以知道指针的威力,当然你也知道了指针一个很大的用处就是用于函数之间参数的传递与返回。指针就相当于一个代理一样,通过代理你知道了你要的东西在哪儿,你去那个地方就可以了,而不是需要把东西整个地板到你面前。
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
函数指针有两个用途:调用函数和做函数的参数。
函数指针的声明方法为:
返回值类型 ( * 指针变量名) ([形参列表]);
如:
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语言学习上的逐步深入,你会发现更多的用途的。
指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递。还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率。简单地说指针就是指向变量和对象的地址。
基本说明:
1、在计算机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等;
2、为了正确地访问这些内存单元,须为每个内存单元编上号。 根据一个内存单元的编号即可准确地找到该内存单元。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。内存单元的指针和内存单元的内容是两个不同的概念。
指针可以快速访问数组中的元素,想访问下一个,就自加1,上一个就自减1,下一行就自加一行,上一行就自减一行,特别适用快速逐点处理图像,
如:unsigned char img[1024][768],*p; int i,j; p=(unsigned char *)img; for ( i=0;i1024;i++) for ( j=0;j768;j++,p++ ) *p+=16;
指针还可以用不同类型来访问同一组数据:
unsigned char a[4],*p; unsigned int *q; p=a; *p=0x12; p++; *p=0x34; p++; *p=0x56; p++; *p=0x78; q=(unsigned int *)a; printf("%xH",*q);会输出十六进制数78563412H
另外指针可以用于给函数传递数组起始地址、结构地址、类地址、结构数组地址,这些复杂数据组合,函数返回值也是这样,另外利用指针还能不从数组起始地址开始传入数组。比如:char str[]; scanf("%s",str); printf("%s\n",str+1);
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流