【C语言 | 您所在的位置:网站首页 › c语言指针赋值给指针 › 【C语言 |
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭 🤣本文内容🤣:🍭介绍C语言函数指针🍭 😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭 本文未经允许,不得转发!!! 目录 🎄一、函数指针的定义✨1.1 直接定义函数指针变量✨1.2 使用typedef定义的类型来定义函数指针变量 🎄二、函数指针的使用✨2.1 给函数指针变量赋值✨2.2 使用函数指针变量 🎄三、函数指针数组🎄四、函数指针数组的指针🎄五、总结 🎄一、函数指针的定义函数指针就是函数的指针。它是一个指针,指向一个函数。 ✨1.1 直接定义函数指针变量直接定义函数指针变量就是将函数声明中的函数名换成(*pFun),pFun是函数指针名称。 看例子: void *fun(const char *str, int strLen); //函数声明 | V void *(*pFun)(const char *str, int strLen); //函数指针定义 ✨1.2 使用typedef定义的类型来定义函数指针变量这个方法分为两步: 1、使用typedef重命名函数指针类型;2、定义函数指针变量。看例子: void *fun(const char *str, int strLen); //函数声明 | V typedef void *(*FunPointType)(const char *str, int strLen); //重命名一个函数指针类型 | V FunPointType pFun; //定义函数指针变量 🎄二、函数指针的使用在C语言中,函数通常存放在代码区(也称为文本段)。代码区是程序内存布局中的一个部分,它通常用于存储可执行程序的指令。这包括函数的机器码以及其他执行代码。 当程序被加载到内存中并执行时,函数的机器码被加载到代码区,并由处理器执行。代码区通常具有只读权限,以防止程序意外修改程序指令,从而确保程序的完整性和安全性。 ✨2.1 给函数指针变量赋值给函数指针赋值时,可以用 &fun 或直接用函数名 fun,因为函数名被编译之后其实就是一个地址,所以这里两种用法没有本质的差别。 char * (*pf)(char * p1,char * p2); char * (*pf2)(char * p1,char * p2); pf = &fun; // 取函数地址 pf2 = fun; // 直接使用函数名 ✨2.2 使用函数指针变量使用函数指针变量时,可以使用取引用符合的格式(*pf) ("aa","bb");调用函数,也可以直接使用指针pf2("aa","bb");的形式去调用。 看例子: // fun_point.c #include #include char * fun(char * p1,char * p2) { printf("[%s:%d]p1=%s p2=%s\n",__FUNCTION__,__LINE__,p1,p2); return p1; } int main() { char * (*pf)(char * p1,char * p2); pf = &fun; (*pf) ("aa","bb"); char * (*pf2)(char * p1,char * p2); pf2 = fun; pf2("aa","bb"); return 0; } 🎄三、函数指针数组函数指针数组是一个数组,数组内的每个元素都是函数指针。 函数指针数组的定义:将函数声明中的函数名换成(*pF[3]),pF是函数指针数组名,[3]表示它是一个数组,有3个数组元素,可以根据需要换成其他数组大小。 void *fun(const char *str, int strLen); //函数声明 | V void *(*pFun)(const char *str, int strLen); //函数指针定义看例子: #include #include char * fun1(char * p) { printf("%s\n",p); return p; } char * fun2(char * p) { printf("%s\n",p); return p; } char * fun3(char * p) { printf("%s\n",p); return p; } int main() { char * (*pf[3])(char * p); pf[0] = fun1; // 可以直接用函数名 pf[1] = &fun2; // 可以用函数名加上取地址符 pf[2] = &fun3; pf[0]("fun1"); pf[0]("fun2"); pf[0]("fun3"); return 0; } 🎄四、函数指针数组的指针函数指针数组的指针,本质上是指针,指向一个数组,数组元素都是函数指针。 函数指针数组的定义:将函数声明中的函数名换成(*(*pF)[3]),pF是函数指针数组指针名称,先与括号内的*结合,表示一个指针;然后与[3]结合,表示指向一个有3个数组元素的数组;再和左边的*结合,表示数组的元素都是指针。 void *fun(const char *str, int strLen); //函数声明 | V void *(*(*pF)[3])(const char *str, int strLen); //函数指针定义看例子: #include #include char * fun1(char * p) { printf("%s\n",p); return p; } char * fun2(char * p) { printf("%s\n",p); return p; } char * fun3(char * p) { printf("%s\n",p); return p; } int main() { char * (*a[3])(char * p); char * (*(*pf)[3])(char * p); pf = &a; a[0] = fun1; a[1] = &fun2; a[2] = &fun3; pf[0][0]("fun1"); pf[0][1]("fun2"); pf[0][2]("fun3"); return 0; } 🎄五、总结👉本文介绍C语言的函数指针,函数指针的定义、函数指针的使用、函数指针数组、函数指针数组的指针。 如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁 参考资料: 《C语言深度剖析》 |
CopyRight 2018-2019 实验室设备网 版权所有 |