初学指针,我们已经了解到,指针是一个存储地址的变量,并且它存储不同类型变量地址的时候开辟的空间大小都
我们在初学指针的时候就已经知道了,指针是作为一个存储数据的地址的变量而存在的,并且,不管是那种数据类型,它所开辟的存储空间的大小都是四个字节,三十二个比特位,当然,我们也知道,指针也可以作为一个变量被存储在另一个指针里面这就是常说的二级指针变量,但是,我今天所要说的重点都不在这里,我想说的是,一般的,我们认为指针只能指向数据,但其实,它还可以指向函数,把函数的地址传给指针,从而用指针来调用函数,它的这种调用方式和一般的函数调用有相似之处,也有着不同之处,那么下面就让我来分析一下吧。
函数在编译阶段被分配给一个入口地址,使用指针指向这个地址,可以方便的对函数进行调用。比如说下面这种1
int(*p)(int ,int)
定义p是一个指向函数的指针变量,它可以指向函数的类型为整型且有两个整形参数的函数。同样的当一个指针指向char类型的函数时,它前面的数据类型就会被定义为 char(*p)(char ,char),这点和指针的常用用法类似。这里附上一段代码,用指向函数的指针比较两个数的大小
#include<stdio.h>
#include<stdlib.h>
min(int a,int b)
{
if(a<b)return a;
else return b;
}
void main()
{
int (*pmin)();
int a,b,m;
p min=min;
printf("Please input two integer numbers:\n");
scanf("%d%d",&a,&b);
m=(*pmin)(a,b);
printf("min=%d",m);
system("pause");
}
这里就定义了一个min函数,用来将两个数当中的较小数作为返回值返回到主函数,然后再输出,这个函数中就有两个整型参数,而指针p就指向了min函数,完成调用工作,原理也很简单,这里就不深究了。
指针作为函数调用的工具时,应该尤其注意函数的类型,以及传参的个数,二者有一个不一致,都会导致程序出现错误,这点很重要,其实,指针不光可以指向函数,他甚至还可以指向结构体,并且可以很好的为结构体服务,关于结构体指针的知识,我会在下一篇文章中详谈的。