欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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语言里这个绑定指的就是函数调用了

编译时绑定指的是直接调用函数,运行时绑定指的是通过函数指针变量调用函数。
在一切可能以后会更改的函数调用的地方都不要直接调用函数,要通过函数指针调用,而且编写函数参数表时要尽量考虑到以后的情况,达到新的函数的函数表和原来的也是一致的(在面向对象语言中可以称为接口)

除此之外,要尽量将一切函数指针赋值的代码,尽量赶到同一个函数或者同一个代码页中,让其他的代码段形成一个稳定的状态,以后修改就不用改这个稳定的部分,以后若是对程序进行修改,就直接按照原来函数的参数表定义一个新函数,然后在函数指针赋值部分根据不同情况重新赋值即可。


原创博文,转载需注明出处