C语言中如何使用void指针?

2023-12-04

以下是我无法理解如何完成的几个函数声明。我扫描了网络以了解 void 指针是什么,并且我知道它必须转换为有用的东西(因为它只指向某个内存块),但我不知道这如何帮助完成这些声明。

/* type of comparison function that specifies a unique order.
   Returns 1 if pointer1 should come before,
   0 if equal to, or -1 if after pointer2. */
typedef int (*compare_function) (const void* pointer1, const void* pointer2);

/* get the data object */
void* get_obj(const void* item_pointer);

像这样的功能还有很多,但我认为如果我了解如何执行这两个功能,我应该处于良好状态。例如,对于第二个函数,我们如何将 item_pointer 转换为应该返回的任何适当的值?


void *通常意味着您只对数据的地址感兴趣,而不管其类型如何,原因如下:

  • 数据的内部表示void *指向是隐藏的,您不应该直接访问数据,信息隐藏,你的函数 2 就是这种情况的一个例子。

  • 调用链中的某些函数知道该类型,例如 withqsort以及大多数将参数传递给其他函数的函数。

  • 类型不是必需的,因为指针指向的数据将被处理为不同的类型,就像memcpy它可以将数据处理为字节,unsigned char *.

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

C语言中如何使用void指针? 的相关文章

  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • 与 for_each 或 std::transform 一起使用时,如何调用 C++ 函子构造函数

    我以前从未使用过 C 函子 所以我只是想了解它们是如何工作的 例如假设我们有这个函子类 class MultiplyBy private int factor public MultiplyBy int x factor x int ope
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐

  • 如何使用 Range 变量作为子程序参数

    我有一个关于 VBA 子例程的非常基本的问题 我想做的是 将 activeCell 设置为 Range 变量 将该变量传递给 Sub 例程 对 activeCell 做一些事情 我试图做的是 Sub myMacro Dim myCell A
  • UglifyJS:使用可选链接语法时出错

    我正在通过 UglifyJS 发送一个脚本 其中包含一些实例可选的链接语法 在浏览器中 此语法可以完美运行 但是 UglifyJS 在文件上产生以下错误 Parse error at Users username Developer scr
  • VSTS 持续集成 - ASP.NET Core 和 Angular 4 项目

    我有 ASP NET Core Web 应用程序 VS2017 并且我开发了 Angular 4 前端项目 VS Code 它应该是该 Core Web 应用程序的一部分 我需要为整个事情设置 CI 因此 当这些项目中的任何一个发生任何变化
  • 修改 ng-include 指令

    如果我在某个自定义位置托管一个有角度的应用程序e g http localhost collosys然后我必须将所有 ng include 更改为所有地址都包含 collosys 因为我使用绝对地址来引用任何 html 文件 这就是我目前正
  • 如何使用node.js获取cheerio中的元素名称

    如何在cheerio 中获取元素的名称 等效的 jQuery 是 attr name 但这会返回undefined在欢呼 我想只有一种情况 someElement attr name 回报undefined 如果没有属性 name在那个元素
  • Spring Batch 的并行线程处理数量上限为 10

    我有以下任务执行器 用于运行带有分区的 10 秒睡眠时间的 tasklet
  • 在 D3.js 中添加带有嵌套条目的属性

    我已使用 d3 nest 进行按行值分组 代码是这样的 function createNestingFunction propertyName return function d return d propertyName var leve
  • 使用带参数的函数时 ebp 和 esp 在堆栈中的行为

    我想了解更多关于堆栈的知识 特别是 当调用带有参数的函数时会发生什么 为此 我编写了以下代码 include
  • 仅保留 SQL 数据库中的前 50 条记录并删除其余记录

    我有一个分数表 由 2 个字段组成 name and 高分 像这样的东西 name score John 2450 Alice 2420 etc 我需要delete直到前 50 名分数为止的所有行 是否可以不创建另一个临时表 请尝试这个 d
  • 理解汇编语言的 mul 和 imul 指令的问题

    我正在学习80386保罗 考特的 PC 组装 mul source 如果操作数是字节大小 则将其乘以 AL 中的字节 注册和结果存储在 AX的16位 fine 如果源是 16 位 则将其乘以 AX 中的字和 32 位结果存储在 DX AX
  • IDispose 对象是否可以没有可用的 Dispose 方法

    我在用文件助手在一个项目和班级中MultiRecordEngine public sealed class MultiRecordEngine EventEngineBase IEnumerable IDisposable 这个类实现了ID
  • Node.js / Mongodb 插入回调返回未定义

    当我运行下面的简单代码来插入新文档时 collectionUsers insert name john function err records if err throw err console log Id of new document
  • 如何管理多个开发人员的合并更新? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我与一个中型开发团队合作 他们都致力于同一个产品 开发人员编写代码来解决功能或错误修复问题 然后将其签入我们的主要开发分支 在 Subversion 中 一旦 QA 人员对票证进
  • frida hook 原生非导出函数

    我出于学习目的逆向这个 Android 应用程序 该应用程序在本机层上实现了所有有趣的功能 因此我在 Arm Android Studio 映像上运行该应用程序并逆向共享库 因此该应用程序正在使用 ghidra 进行调用我设法将共享对象反编
  • 如何使此正则表达式替换适用于所有字符,而不仅仅是第一个字符?

    我正在尝试用连字符替换字符串中的所有空格 我试过这个 h3Text replace s 但它仅替换空格的第一个实例 而不替换其后的空格 使它替换的正则表达式是什么all空位 try h3Text replace s g the g标志是这里
  • 如何在Python matplotlib中的LaTeXed下标中包含字符串链[重复]

    这个问题在这里已经有答案了 我想使用 LaTeX 在 matplotlib 图的图例中编写一个带有下标的变量 解决此类问题的一种可能的代码可能是 import numpy as np import matplotlib pyplot as
  • 使用 JSON 每 x 秒更新传单标记位置

    我的地图上有一个标记 代表国际空间站的当前位置 从http open notify api herokuapp com iss now json callback 我还试图让它每 1 秒移动一次 以跟随空间站的轨道 这是我现在的代码 get
  • 在变量周围添加引号

    我需要从 SQL 导出数据并导入 SAS 地址字段的字符串中间有 我尝试使用 CSV 和制表符分隔 但每次 SAS 都会由于 而打破地址字段 我尝试使用另一个问题中的代码将逗号替换为空格 但它不起作用 update temp2 set ST
  • WinForm 应用程序 UI 在长时间运行的操作期间挂起

    我有一个 Windows 窗体应用程序 我需要使用一个 for 循环 其中有大量远程调用 大约 2000 3000 个调用 在执行 for 循环时 我失去了对表单和表单控件的控制 因为它变成了一个大进程 有时它显示 未响应 但如果我等待很长
  • C语言中如何使用void指针?

    以下是我无法理解如何完成的几个函数声明 我扫描了网络以了解 void 指针是什么 并且我知道它必须转换为有用的东西 因为它只指向某个内存块 但我不知道这如何帮助完成这些声明 type of comparison function that