【C语言 您所在的位置:网站首页 c语言指针赋值给指针 【C语言

【C语言

2023-12-24 00:58| 来源: 网络整理| 查看: 265

😁博客主页😁:🚀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 实验室设备网 版权所有