函数指针 虚函数遐思

本文探讨了函数指针的用途,包括调用函数和作为回调函数参数,同时比较了函数指针与虚函数的相似性。通过对虚函数的深入剖析,特别是虚函数表的工作原理,阐述了C++中多态性的实现方式。通过实例展示了虚函数表在内存中的布局,解释了如何通过虚函数表调用相应的函数。
摘要由CSDN通过智能技术生成

在看函数指针的时候,发现自己对这种方式完全没有使用的习惯,也很少见到类似代码,很疑惑这种看起来很重要的使用方式到底重要在何处。看到所起到的“函数替换”功能,有有些像是虚函数,恰好想起对于虚函数的虚函数表和虚函数的工作机会并不是十分清楚,所以打算彻底攻克这一部分。

函数指针

什么是函数指针

  函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数

函数指针的用法

用法1:调用函数

int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */

或者使用下面的方法将函数地址赋给函数指针:

f = &func;
f(1);

  赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。赋给函数指针的函数应该和函数指针所指的函数原型是一致的

用法2:做函数的参数(又称回调函数)

  如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

#include <stdio.h>

void printWelcome(int len)
{
       printf("欢迎欢迎 -- %d/n", len);
}

void printGoodbye(int len)
{
       printf("送客送客 -- %d/n", len);
}

void callback(int times, void (* print)(int))
{
       int i;
       for (i = 0; i < times; ++i)
       {
              print(i);
       }
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值