企业网站建设有几种形式,烟台网站建设专业臻动传媒,自动推广软件,大连建设工程信息网怎么没有了本章重点内容#xff1a;
字符指针指针数组数组指针数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析⚡函数指针
函数指针#xff1a;指向函数的指针。 通过之前的学习我们知道数组指针中存放的是数组的地址#xff0c;那么函…本章重点内容
字符指针指针数组数组指针数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析⚡函数指针
函数指针指向函数的指针。 通过之前的学习我们知道数组指针中存放的是数组的地址那么函数指针存放的是函数的地址吗这里的答案是肯定的代码示例如下
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
void test()
{printf(hello world\n);
}
int main()
{printf(%p\n, test);printf(%p\n, test);return 0;
}
代码运行结果如下 我们可以观察到函数指针确实可以得到函数的地址。C语言中 函数名和函数名 都是函数地址。接下来我将为大家说明函数地址怎样存起来代码示例如下
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
int Add(int x, int y)
{return x y;
}
int main()
{int(*pf)(int, int) Add; //函数的地址要存起来就得放在【函数指针变量】中去int ret (*pf)(3,5); //使用指针进行函数调用//int ret pf(3,5);//int ret Add(3,5);//这三种写法都可以成功调用Add函数其中第一种的*是一个摆设写与不写都可以写上是为了理解方便printf(%d\n,ret);return 0;
} 函数指针的写法说明示例 下面来阅读两段有趣的代码
//代码1
(*(void (*)())0)();
想要真正阅读这个代码的意思分为以下几步
将0强制类型转化为void(*)()类型的函数指针这就意味着0地址处放着一个函数函数没有参数返回类型是void。调用0地址处的这个函数。
//代码2
void (*signal(int , void(*)(int)))(int);
代码二的括号内部是一个函数的声明函数名字是signalsignal函数的第一个参数是 int 类型第二个是 void(*)(int) 类型的函数指针该函数指针指向的函数参数是 int 函数返回类型为 voidsignal 函数的返回类型也是一个函数指针。该函数指向的函数参数是 int 返回类型为 void 。
这里给大家补充一个简化代码2的方法代码示例如下
#define _CRT_SECURE_NO_WARNINGS
#includestdio.htypedef int* ptr_t; //将 int* 重新命名为 ptr_t
typedef void(*pf_t)(int); //意思是将 void(*)(int) 重新命名为 pf_tpf_t是类型int main()
{void(* signal( int, void(*)(int) ) )(int);//化简后pf_t signal(int, pf_t);return 0;
}
这里要注意区分typedef void(*pf_t)(int)中的 pf_t 是类型名不写 typedef 时void(*pf)(int) 中的pf是指针变量的名字。 感谢大家能够看完这篇博客创作时长小伙伴们觉得我的博客对你有帮助不妨留下你的点赞的收藏关注我带你了解不一样的C语言。