typedef 如何用于函数指针

2024-04-21

我想我可能患有可怕的“意外程序员”病,至少在 typedef 和函数指针方面是这样。因此,我一直在尝试涉及这些的各种组合,以根据我得到的所有输出来分析结果。

但当我不断尝试不同的组合时,我现在没有分析结果,而是迷失在过程中。

我希望你们能帮我解决这个混乱的问题。

第一个代码示例

typedef void (print)(void);
void do_something (void) { printf("Hello World\n"); }

print *pr;
pr = &do_something;
pr(); // Hello World

第二个代码示例

typedef void (print)(void);
void do_something (void) { printf("Hello World\n"); }

print *pr;
pr = do_something;
pr(); // Hello World

上面的两个代码示例是如何工作的,就好像 '&' 对函数名称没有影响

第三个代码示例

typedef void (print)(void);
void do_something (void) { printf("Hello World\n"); }

print pr;
pr = do_something; // compile error
pr = &do_something; // compile error
pr();

我希望上述任务之一能在这里工作,但是该死的!我真的不明白函数指针(也许还有 typedef)。


函数名的地址和普通函数名的含义是相同的,所以&对函数名称没有影响。

同样,当使用函数指针时,多次取消引用也不是问题:

#include <stdio.h>
typedef void print(void);
static void dosomething(void) { printf("Hello World\n"); }

int main(void)
{
    print *f1 = dosomething;
    print *f2 = &dosomething;
    f2();
    (f1)();
    (*f1)();
    (**f2)();
    (***f1)();
    (****f2)();
    (*****f1)();
}

可以在以下情况下干净地编译:

gcc -O3 -g -Wall -Wextra -Werror -Wmissing-prototypes -Wstrict-prototypes \
    -Wold-style-definition -std=c99 xx.c -o xx

我不会说多颗星就是好的风格;事实并非如此。这是“奇怪的,而且(是的,你可以这么说)反常的”。一颗就足够了(一颗星主要是针对像我这样在标准说“可以通过指针调用函数而不使用(*pointer_to_function)(arg1, arg2)符号;你可以写pointer_to_function(arg1, arg2)如果你喜欢的话”)。是的,这很奇怪。不,没有其他类型(或类型类别)表现出相同的行为,谢天谢地。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

typedef 如何用于函数指针 的相关文章

  • ASP MVC4 - 通过视图模型传递列表以查看

    我有一个模型人物 其中包括出生日期等字段 我想将所有人的列表以及每个人的计算年龄传递给视图 因此 视图模型 public class vm PersonList public Person Person get set public int
  • lambda 始终返回“1”

    有这样的代码 include
  • 将文件扩展名与应用程序关联

    我编写了一个编辑特定文件类型的程序 我想为用户提供在启动时将我的应用程序设置为该文件类型的默认编辑器的选项 因为我不需要安装程序 我尝试编写一个可重用的方法 通过向 HKEY CLASSES ROOT 添加一个键来为我关联一个文件 最好在任
  • 从文本文件中读取所有内容 - C

    我正在尝试从文本文件中读取所有内容 这是我写的代码 include
  • ASP.NET Core 测试 - 没有方法 'public static IHostBuilder CreateHostBuilder(string[] args)

    我正在尝试在测试中设置我的应用程序并在中使用Startup s Configure method context Database EnsureCreated 并期待着Sqlite文件出现在Test sbin文件夹 这是我的代码 using
  • “上下文模式”的这种实现看起来不错吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有多个处理单元可能存在于一个数组中 每个处理单元都有自己的参数 我想使用以下方式传达每个处理单元的参数上下文模式在它被建议作为另一个问题的解答 ht
  • g++.exe 和 x86_64-w64-mingw32-g++.exe 有什么区别?

    同样的问题也适用于 gcc ar 等 在 Code Blocks 中将工具链可执行文件从 Something exe 更改为 x86 64 w64 mingw32 something exe 时 代码仍然可以完美编译 此外 32 位和 64
  • 如何获取字符串宽度

    我需要在类库中构建一个函数 该函数接受一个字符串和该字符串的特定字体 然后获取字符串的宽度 那么我怎样才能得到字符串边界宽度呢 另一种方法是使用TextRenderer 并致电its MeasureString http msdn micr
  • C 或 C++ 中是否有轻量级的多部分/表单数据解析器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑将多部分表单数据解析集成到 Web 服务器模块中 以便可以减轻后端 Web 应用程序 通常用动
  • .NET 查询字符串值的正则表达式

    我需要从 Url PathAndQuery 中删除任何 id SomeValue 其中 SomeValue 可以是整数或字符串 它后面可能有也可能没有另一个 符号 所以它可能是 somepage aspx cat 22 id SomeId
  • 自定义文件属性

    我需要遵循 在我的申请中 我有文件 需要随时签入和签出的文件 当我从应用程序中签出文档时 我需要将自定义属性添加到文件中 以便稍后在签入文档时可以识别它 我尝试使用以下代码使用 DSOFile 中的 OleDocumentPropertie
  • 在 C、C++ 中实现腐蚀、膨胀

    我对二值图像的膨胀是如何完成的有理论上的了解 AFAIK 如果我的 SE 结构元素 是这样的 0 1 1 1 在哪里 代表中心 我的图像 二进制是这样的 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0
  • 从 WMI 运行 exe 时的网络身份验证

    我有一个 C exe 需要使用 WMI 运行并访问网络共享 但是 当我访问共享时 我收到 UnauthorizedAccessException 如果我直接运行 exe 则可以访问共享 我在这两种情况下都使用相同的用户帐户 我的应用程序有两
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • 带有 epgm 的 ZeroMQ PUB/SUB 无法接收同一主机上进程发送的消息

    我的所有进程都有两个套接字 一个 PUB 和一个 SUB 并且它们都使用相同的多播地址和端口 例如 PUB 会这样做 绑定 epgm 239 192 1 1 5555 SUB 将执行以下操作 连接 epgm 239 192 1 1 5555
  • 在 Qt C++ 中使用多个键

    我正在构建 坦克 游戏 我使用关键事件在地图上运行我的坦克 实际上我当时只能使用一把钥匙 但我需要有能力去完成任务 同时向上和离开 这是我的单键事件代码 switch event gt key case Qt Key Up if ui gt
  • 有没有 C# 到 C 的转换工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道 C 与 NET Framework 不同 C 是一种符合 ECMA ECMA 334 和 ISO
  • 如何检查多个变量是否等于同一值?

    如何比较多个项目 例如 我希望检查所有变量 A B 和 C 是否都等于字符 X 或所有三个变量都等于 O 如果其中 2 个为 X 1 个为 O 则应返回 false I tried if A B C X A B C O Do whateve
  • C/C++ 中的最小二乘回归

    如何在 C C 中实现因子分析的最小二乘回归 the黄金标准是LAPACK http www netlib org lapack lug node27 html 你特别想要xGELS
  • 如何注销多个非当前用户的会员用户?

    我正在使用属于 MVC2 默认项目一部分的 MembershipProvider 我希望能够获取用户名列表 注销用户 并在需要时销毁他们的会话 我能想到的最接近的是 foreach string userName in UserNames

随机推荐

  • 查明字符串列表项是否以另一个列表中的另一个项目开头

    我想循环遍历一个字符串列表 并找出该列表中的项目是否以另一个列表中的项目之一开头 所以我有类似的东西 List
  • 在 Mac OS Lion 上使用 tmux 提示之前出现奇怪的空格

    它刚刚发生在我的 Lion 系统上 我正在使用 zsh 和 tmux 在 zsh shell 中正常 tmux 屏幕中的双倍空间 我是否缺少 zsh 或 tmux 中的某些配置 使用 u 选项启动 tmux 以实现 unicode 功能 看
  • Gitlab CI 运行程序未构建或显示任何输出

    昨天我从 Gitlab 7 x 升级到 8 0 4 几乎一切都很顺利 我之前使用 CI 没有问题 升级后必须迁移或重新开始 我选择重新开始 因为我只有一个项目 我多次添加了一个新的 shell 运行程序 尝试了 gitlab ci mult
  • 方法控制器不存在。

    所以我又使用了这个格式 在我的routes php中我有 Route controller datatables HomeController PaymentsData gt payments data getIndex gt datata
  • 使用 jQuery 查找文本字符串?

    假设某个网页有一个字符串 例如我想查找 我是一个简单的字符串 我将如何使用 JQuery 来解决这个问题 jQuery 有 contains 方法 这是给您的一个片段 上面的选择器选择包含目标字符串的任何元素 Foundin 将是一个包含任
  • ASP.NET MVC Razor 渲染额外空白

    在 Asp net MVC 中 Razor 在文本块之间插入额外的空格 我想以这种方式呈现一个列表 1 2 3 但得到 1 2 3 for int i 1 i lt 3 i
  • 替换字符串中的多个字符 (XSLT)

    我需要能够替换某些字符 以便我可以将它们用作 CSS 类 我有诸如类 名称 类名之类的字符串 这些字符串不是有效的 CSS 类 据我所知 如何使用替换功能来替换多个字符 E g translate className would repla
  • 如何在谷歌同意屏幕中添加徽标?

    我已经在谷歌开发者控制台中创建了项目 现在我想在同意屏幕中设置我的徽标 我的计算机上有徽标 同意屏幕上的徽标字段需要 URL 有什么方法可以在我的计算机上的同意屏幕上设置徽标吗 我还尝试在谷歌驱动器上上传图像并将其共享链接放在徽标字段中 您
  • 使用 dom4j DOMDocument 提供 validator.validate(DOMSource) 在 java 1.6 中失败(不允许 xsi:noNamespaceSchemaLocation),在 1.5 中有效

    使用 dom4j DOMDocument 提供 validator validate DOMSource 在 java 1 6 中失败 不允许 xsi noNamespaceSchemaLocation 出现在根元素中 在 1 5 中有效
  • “驱动程序未定义”Python/Selenium

    我想在 Python 上使用 Selenium 但有一条警告消息 driver webdriver Chrome D Selenium Chrome chromedriver exe NameError 名称 driver 未定义 我已经安
  • 更改 Hibernate 继承中的子类型

    我想在 Play Framework 中使用 Hibernate 建模三个类 Entity Inheritance strategy InheritanceType JOINED public class SupplyArea extend
  • 使用 TSQL 解压缩值

    如何解压缩存储过程中的 varbinary max 值 我想在 TSQL 代码中实现或调用gunzip 算法 最好不启用 CLR 调查 sp OACreatehttp msdn microsoft com en us library ms1
  • React 无法读取未定义的属性映射

    我对反应很陌生 我正在尝试从 Rails api 引入数据 但我收到了错误TypeError Cannot read property map of undefined 如果我使用反应开发工具 我可以看到状态 如果我在控制台中使用它 我可以
  • MVC 1 和 IIS 7 错误代码 4011

    我有一个在 IIS 7 5 上运行的 MVC 1 应用程序 一些操作完成后 我得到了一个使用 System Web Routing RouteValueDictionary 作为第二个参数的 RedirectToRoute 调用 基本上 它
  • 从数据帧中分层随机抽样

    我有一个格式为的数据框 head subset ants 0 1 1 0 1 age 1 2 2 1 3 lc 1 1 0 1 0 我需要根据年龄和 lc 创建带有随机样本的新数据框 例如 我想要来自age 1和lc 1的30个样本 来自a
  • Python2 和 Python3 使用带有查找和索引的映射时的区别

    给定一个模式和一个字符串str 求如果str遵循相同的模式 这里的 follow 表示完全匹配 这样在pattern中的字母和pattern中的非空单词之间存在双射str 例子 pattern abba str dog cat cat do
  • React-Redux 应用程序中的 OpenID Connect SSO

    我正在尝试使用 OpenID Connect 提供程序在我的 React Redux 应用程序上实现 SSO 目的是保护所有组件 并在会话结束时将用户重定向到身份提供者的登录页面 这就是为什么我不能在应用程序中拥有专用的登录页面 组件 我读
  • 使用平均值填充 pandas 数据框中的缺失值

    datetime 2012 01 01 125 5010 2012 01 02 NaN 2012 01 03 125 5010 2013 01 04 NaN 2013 01 05 125 5010 2013 02 28 125 5010 2
  • 蓝牙串行插件不适用于 ionic

    我正在尝试将蓝牙集成到我的离子应用程序中 以便它可以从蓝牙设备接收数据 我尝试使用蓝牙插件 但在 PC 和 Android 设备上都出现了一堆错误 我已经使用以下命令安装了蓝牙串行 cordova 插件添加 com megster cord
  • typedef 如何用于函数指针

    我想我可能患有可怕的 意外程序员 病 至少在 typedef 和函数指针方面是这样 因此 我一直在尝试涉及这些的各种组合 以根据我得到的所有输出来分析结果 但当我不断尝试不同的组合时 我现在没有分析结果 而是迷失在过程中 我希望你们能帮我解