函数指针和指针函数从外观上来看只有一个括号的区别
函数指针 int (*add)(int a,int b); 指针函数 int *add(int a,int b);
使用函数指针可以将该指针指向任意函数的首地址,可以在源码编译阶段就定义好机器指令,通过函数指针指向这段机器指令的首地址(C语言编译时,函数将被直接编译成机器指令),从而让c语言直接执行机器指令提升效率更贴近底层。
指针函数表示的是一个函数,但是函数返回的值是一个指针。
函数指针是一个指针,普通的指针指向一个变量的内存地址,但是该指针指向的是一个函数的首地址。
#include<stdio.h> //声明指针函数 int *add(int a,int b); int main(){ int a=5; int b=3; //调用指针函数,该函数最后返回的是一个int类型的变量内存地址,所以要用符合条件的指针来接收 int *c=add(a,b); //这里打印的是变量c的内存地址 例如: c=0xbf9932e4 printf("c=%p ",c); return 0; } //定义指针函数 int *add(int a,int b){ int c=a+b; //这里返回的是变量c的内存地址 return &c; }
#include<stdio.h> //声明函数指针 addPointer int(*addPointer)(int a,int b); //声明一个普通函数 int add(int a,int b); int main(){ int a=3; int b=5; //初始化函数指针addPointer,将其指向add方法 addPointer=add; //调用函数指针指向的函数 int c=addPointer(a,b); printf(" c=%d ",c); return 0; } int add(int a,int b){ int c=a+b; return c; }