C语言指针简单介绍
程序员文章站
2024-02-29 18:27:58
...
函数指针是什么?
指针即地址的形象化名称,函数指针就是函数的地址。
那么函数也有地址吗?
如果在程序中定义一个函数,经过编译函数会编译成二进制代码,程序运行时会将函数的二进制代码加载到内存中然后被cpu执行,而这段二进制代码的首地址(相对地址,以后讨论)就是函数指针(地址),在源代码中,函数名就是函数指针。
如何在程序中使用函数指针?
#include<stdio.h>
int max(int a, int b);
int main()
{
int (*pfun)(int,int); //定义一个参数表为(int,int)返回值为int的函数指针pfun
pfun = max; //讲max函数的指针赋值给pfun
printf("调用max的结果为%d\n",max(1,5)); //调用max函数
printf("调用函数指针pfun指向的函数的结果为%d",pfun(1,5)); //调用pfun指针指向的函数
return 0;
}
int max(int a, int b)
{
return a>b?a:b;
}
运行结果:
调用max的结果为5
调用函数指针pfun指向的函数的结果为5
如何在程序设计中运用到函数指针呢?
程序设计的时候为了让程序日后维护更加方便,通常要遵循
避免编译时绑定,要在运行时绑定
这个绑定在面向对象语言中指的是对象的调用,虽然C语言不是面向对象语言,但是为了程序结构清晰也要遵循这一原则,在C语言里这个绑定指的就是函数调用了
编译时绑定指的是直接调用函数,运行时绑定指的是通过函数指针变量调用函数。
在一切可能以后会更改的函数调用的地方都不要直接调用函数,要通过函数指针调用,而且编写函数参数表时要尽量考虑到以后的情况,达到新的函数的函数表和原来的也是一致的(在面向对象语言中可以称为接口)
除此之外,要尽量将一切函数指针赋值的代码,尽量赶到同一个函数或者同一个代码页中,让其他的代码段形成一个稳定的状态,以后修改就不用改这个稳定的部分,以后若是对程序进行修改,就直接按照原来函数的参数表定义一个新函数,然后在函数指针赋值部分根据不同情况重新赋值即可。
原创博文,转载需注明出处
上一篇: 字节/比特互转(C)