函数指针如何工作?

2023-11-25

我正在问一些具体问题。

  1. 如何在类中初始化它们?
  2. 如何将函数作为参数传递?
  3. 类中是否需要声明和定义函数指针?

对于问题 2,我的意思是:

void s(void) {
   //...
}

void f(function) { // what should I put as type to pass a function as an argument
   //...
}

f(s);

要定义函数指针,请使用以下语法:

return_type (*ref_name) (type args, ...)

因此,定义一个名为“doSomething”的函数引用,它返回一个int并接受int论证,你会这样写:

int (*doSomething)(int number);

然后您可以将引用分配给实际函数,如下所示:

int someFunction(int argument) {
   printf("%i", argument);
}

doSomething = &someFunction;

完成后,您可以直接调用它:

doSomething(5); //prints 5

因为函数指针本质上只是指针,所以您确实可以将它们用作类中的实例变量。

当接受函数指针作为参数时,我更喜欢使用typedef而不是在函数原型中使用混乱的语法:

typedef int (*FunctionAcceptingAndReturningInt)(int argument);

然后,您可以使用这个新定义的类型作为函数参数的类型:

void invokeFunction(int func_argument, FunctionAcceptingAndReturningInt func) {
   int result = func(func_argument);
   printf("%i", result);
}

int timesFive(int arg) {
   return arg * 5;
}
invokeFunction(10, &timesFive); //prints 50
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数指针如何工作? 的相关文章

  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • 如何将 mysql_data_seek 与 PDO 一起使用?

    我想将 mysql data seek 与来自 google 搜索的 PDO 一起使用我发现它应该如下所示 row0 result gt fetch PDO FETCH ASSOC PDO FETCH ORI ABS 0 但这不起作用 我做
  • 同一 AppDomain 中的多个 WPF 应用程序

    我得到以下设置 WPF 应用程序 exe and 包含 WinForms 窗口和 WPF 窗口的 DLL WPF Application exe 从 DLL 调用 WinForms 窗口 WinForms 窗口在 DLL 中创建 WPF 窗
  • 如何将数据从DialogFragment发送到Fragment?

    我有一个片段可以打开Dialogfragment获取用户输入 字符串和整数 我如何将这两件事发送回片段 这是我的 DialogFragment public class DatePickerFragment extends DialogFr
  • 我可以将 Javascript 对象传递给 Android WebView 吗?

    我正在将 Web 应用程序迁移到 Android 版本 接收并处理 JSON 数据后 我在页面中保存了一组 Javascript 对象 如何将 javascript 对象之一的完整内容 传出 到 webview 容器以使用本机 androi
  • 为什么 jQuery 的 .ajax() 方法不发送我的会话 cookie?

    登录后通过 ajax 到某个网站 我正在尝试发送第二个 ajax 向该站点发出请求 但是当我检查使用 FireBug 发送的标头时 请求中不包含会话 cookie 我究竟做错了什么 我是在跨域场景下操作的 在登录期间 远程服务器返回 Set
  • 制作一个android地图菜单来改变地图类型

    我的 Android 应用程序中有一张地图 默认情况下 它显示卫星视图 但我已将其关闭以仅显示路线图视图 但是 我想知道如何构建一个菜单 以便当用户按下菜单按钮时 它会在底部显示一个带有 切换卫星地图 的部分 我将来会在菜单中添加其他项目
  • Linq-to-sql 不包含或不在?

    我正在构建一个民意调查小部件 我有 2 个表 分别称为 Polls 和 PollsCompleted 我需要执行 linq 查询来获取 PollsCompleted 中给定用户不存在的所有民意调查 我有以下几套 民意调查 其中 Active
  • 在编译时重命名符号,无需以跨平台方式更改代码

    在创建静态对象时 是否可以在编译时以跨平台方式重命名符号 无需更改代码 我最近推荐了 objcopy 但 linux 不是唯一的目标平台 它也必须在 mac 上运行 我正在使用 gcc 进行编译 所以我希望有某种 gcc 选项 我听说过 d
  • Proguard 回溯丢失的行号

    我正在尝试从我的 Android 应用程序中反混淆堆栈跟踪 我在构建应用程序时使用了 proguard 并且运行 retrace 似乎或多或少有效 不起作用的是解码行号 输出上不显示行号 它列出了每个 at 的多个选择 这是我的 progu
  • Ember Data 嵌套资源 URL

    假设我有一个具有以下布局的 Rails 应用程序 从我的实际项目中对此进行了一些简化 User has many Notes Category has many Notes Note belongs to User belongs to C
  • 在 PHP 中为逗号分隔的字符串添加引号

    我有一个表单 它是一个选择多个输入的表单 它发布如下值 option1 option2 option3 etc 将其转换为的最佳方法是什么 option1 option2 option3 etc 目前我正在这样做 但感觉不对 variabl
  • Spring Boot 升级错误 - 名称为 org.springframework.transaction.config.internalTransactionalEventListenerFactory 的 bean 定义无效

    在尝试在基于 java 的 Web 应用程序中将 spring boot 升级到最新版本 2 1 1 并将 spring 框架升级到 5 1 3 时 出现以下错误 Invalid bean definition with name org
  • Sqlalchemy:使用多个 filter() 调用生成 OR 子句

    我是 sqlalchemy 的新手 需要一些帮助 我正在尝试编写一个小型应用程序 我必须为其动态更改选择语句 所以我这样做s select files 然后我添加过滤器s s where files c createtime between
  • 终端启动时出现错误消息[重复]

    这个问题在这里已经有答案了 每次启动终端时我都会收到此错误消息 bash usr local bin usr local bin usr bin bin usr sbin sbin opt X11 bin No such file or d
  • Java:IndentingXMLStreamWriter 替代方案?

    我正在使用 StAX 创建一个相当大的 xml 文档 到目前为止 我一直在使用 IndentingXMLStreamwriter 类来获取格式良好的文档 另请参阅这个答案 几天前 我们使用较旧的 jdk 版本 6 26 设置了一个 jenk
  • JSF 更新复合组件

    是否可以仅通过指定父复合 ID 来更新复合组件的子组件 例如 如果我有
  • appcfg.py 显示您必须以管理员身份登录

    当我尝试通过以下方式将示例 csv 数据上传到我的 GAE 应用程序时appcfg py 它显示以下 401 错误 2015 11 04 10 44 41 820 INFO client py 571 Refreshing due to a
  • 如何在 Selenium WebDriver 中自动清除浏览器缓存?

    如何在每次测试运行之前清除浏览器缓存 我尝试过driver manage deleteAllCookies in setUp创建驱动程序实例后的方法 它适用于 Firefox 但对于 IE 不起作用 有没有IE的解决办法 请提供给我 您可以
  • .NET 中的跨进程读写同步原语?

    是否有跨进程工作的读 写锁定机制 类似于互斥锁 但读 写而不是独占锁定 我想允许并发读取访问 但允许独占写入访问 Windows 不包含跨进程读写锁 可以使用信号量和互斥量的组合来构造互斥量 互斥量由写入者持有以进行独占访问 或者由读取者持
  • 函数指针如何工作?

    我正在问一些具体问题 如何在类中初始化它们 如何将函数作为参数传递 类中是否需要声明和定义函数指针 对于问题 2 我的意思是 void s void void f function what should I put as type to