c语言|C语言难点之C中的功能指针
文章图片
文章图片
文章图片
在C语言中 , 就像普通的数据指针(int * , char *等)一样 , 我们可以具有指向函数的指针 。 以下是一个简单的示例 , 显示了使用函数指针进行的声明和函数调用 。
【c语言|C语言难点之C中的功能指针】
在上面的示例中 , 为什么在功能指针(例如fun_ptr)周围需要一个额外的括号? 如果删除括号 , 则表达式“ void(* fun_ptr)(int)”变为“ void * fun_ptr(int)” , 这是一个返回空指针的函数的声明 。
以下是有关函数指针的一些有趣的事实 。
1.与普通指针不同 , 函数指针指向代码 , 而不是数据 。 通常 , 函数指针存储可执行代码的开头 。
2.与普通指针不同 , 我们不使用函数指针分配取消分配内存 。
3.函数名称也可以用来获取函数的地址 。 例如 , 在下面的程序中 , 我们在分配中删除了地址运算符'&' 。 我们还通过删除*更改了函数调用 , 该程序仍然有效 。
4.像普通指针一样 , 我们可以有一个函数指针数组 。 下面第5点的示例显示了指针数组的语法 。
5.可以使用功能指针代替开关盒 。 例如 , 在下面的程序中 , 要求用户在0和2之间进行选择以执行不同的任务 。
6.像普通数据指针一样 , 函数指针可以作为参数传递 , 也可以从函数返回 。例如 , 考虑下面的C程序 , 其中wrapper()接收一个void fun()作为参数并调用传递的函数 。
这一点在C语言中特别有用 。 在C语言中 , 我们可以使用函数指针来避免代码冗余 。 例如 , 简单的qsort()函数可用于以升序或降序或在结构数组的情况下以任何其他顺序对数组进行排序 。 不仅如此 , 借助函数指针和void指针 , 还可以将qsort用于任何数据类型
与qsort()类似 , 我们可以编写自己的函数 , 这些函数可用于任何数据类型 , 并且可以执行不同的任务而无需代码冗余 。 以下是可用于任何数据类型的示例搜索功能 。 实际上 , 我们可以使用此搜索功能通过编写自定义的比较功能来查找接近的元素(低于阈值) 。
通过编写单独的自定义compare() , 以上搜索功能可用于任何数据类型 。
7. C ++中许多面向对象的功能都是使用C中的函数指针实现的 。 例如虚函数 。 类方法是使用函数指针实现的另一个示例 。
- 京东|华为方舟编译器正式支持C语言:完全开源
- 科学家|飞机明明是现代产物,可是古墓中的发现,却打破了科学家认知!
- 葡萄酒|古人口中的上古来自哪里?难道是另外一个世界,或另外一颗星球?
- 蝴蝶|飞机明明是现代产物,可是古墓中的发现,却打破了科学家认知!
- |传说中的“水鬼”被人类抓住?看到水鬼真容后,真的是开眼了
- 陨石|唯一被陨石砸中的人,虽只受了点擦伤,但后面的麻烦却改变她一生
- 科技成果转化联盟|制造业市场增长机遇与投资分析中的人工智
- 眼镜蛇|鸡蛇:西方传说中的一种神秘动物,长相诡异,被它看一眼就会毙命
- |你想知道的C ++中的构造函数,这里都有
- 女孩|生物课本中的“肌肉女”,为啥会被删除?专家:学生把持不住