问题标签 [void-pointers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2224 浏览

c - 带有 void 指针的动态数组队列数据结构的问题

也许没有办法以我喜欢的方式解决这个问题,但我不知道一切,所以我最好问问......

我已经实现了一个带有动态数组的简单队列,因此用户可以使用它想要的任意数量的项目进行初始化。我也在尝试使用void指针来允许任何数据类型,但这就是问题所在。

这是我的代码:

问题出在queuePop功能上。当我调用它时,我失去了价值,因为我立即释放了它。我似乎无法解决这个困境。我希望我的库是通用的和模块化的。用户不应该关心分配和释放内存,这是图书馆的工作。

用户如何仍能从中获取值queuePop并让库处理所有内存分配/释放?

0 投票
3 回答
2693 浏览

c - 处理双重间接时避免不兼容的指针警告

假设这个程序:

...是否有可能以某种方式避免 GCC 警告

...不强制转换为 (void**) (或只是禁用兼容性检查)?因为我非常想保留有关间接级别的兼容性警告......

0 投票
3 回答
1334 浏览

c++ - 如何摆脱空指针

我继承了一个最初用 C 编写的大型应用程序(但同时也添加了很多 C++)。由于历史原因,该应用程序包含大量空指针。在你开始窒息之前,让我解释一下为什么这样做。

该应用程序包含许多不同的数据结构,但它们存储在“通用”容器中。现在我会为它使用模板化的 STL 容器,或者我会给所有的数据结构一个通用的基类,这样容器就可以存储指向基类的指针,但是在 [good?] 旧 C 时代,唯一的解决方案是将结构指针强制转换为 void 指针。

此外,还有很多代码可以处理这些空指针,并使用非常奇怪的 C 构造来模拟 C 中的多态性。

我现在正在修改应用程序,并试图摆脱空指针。为所有数据结构添加一个通用基类并不难(几天的工作),但问题是代码中充满了如下所示的结构。

这是如何存储数据的示例:

这是如何再次获取数据的示例:

我实际上想用一些智能指针(引用计数)替换所有 void 指针,但我找不到自动化(或至少)帮助我摆脱所有与 void 之间的强制转换的技巧-指针。

关于如何查找、替换或以任何可能的方式与这些转换交互的任何提示?

0 投票
4 回答
47993 浏览

c++ - 将 void* 转换为 std::string

在仔细阅读网络并弄乱自己之后,我似乎无法将 void* 的目标(它是一个字符串)转换为 std::string。我已尝试按照此页面sprintf(buffer, "%p", *((int *)point));的建议使用来获取 C 字符串,但无济于事。可悲的是,是的,我必须使用 void*,因为这就是 SDL 在其 USEREVENT 结构中使用的。

对于那些感兴趣的人,我用来填充 Userevent 的代码是:

有任何想法吗?

编辑:感谢所有回复,我只需要将 void* 转换为 std::string*。傻我。非常感谢你们!

0 投票
2 回答
107 浏览

c++ - 使按位函数适用于任何类型的整数输入 c++ 的最佳方法是什么?

所以我需要以位读取标志并以位为单位设置标志。这些位具有各种大小的整数:int16、int32、int64 等。

我想要一个执行以下操作的函数:

我不想编写相同的代码,以便在单独但相同的函数中将不同大小的整数与位隔离开来(对于我想编写的大量位函数)。

我考虑过为数据使用 void 指针,这样一切都可以通过一个函数运行。这是一个糟糕的设计吗?至于效率如何?由于缺乏经验,我没有坏/好设计的概念。

这些标志必须经常查看,因为这是针对数据采集系统的。空指针实现会相当有效吗?

我知道过早的优化是不好的,但我想知道哪些事情通常比其他事情效率低或效率高,这样我才能做出正确的决定。

提前谢谢你送我去学校。

0 投票
4 回答
127 浏览

c - 表达式“BIO *client = (BIO *)arg”是什么意思?

这是代码的上下文:

表达式是否将(BIO *)argvoid 指针arg转换为指向 BIO 的指针?我不确定我是否做对了。

任何帮助将非常感激!

禅宗

0 投票
2 回答
2344 浏览

c# - 如何将 void* 转换为可在 C# 中使用的类型?C DLL 和 C# 之间的互操作性

我是一名 C/C++ 程序员,但我被要求更新一个用 C# 编写的程序以与设备通信。我的 C# 知识非常基础。

以前的版本完全是用C#写的,但是现在实际上访问设备的API被更改为C。我发现我可以通过使用以下方式导入C函数API:

在 C 中,这个函数原型是:

其中 HANDLE 定义为:

但是,此功能无法按预期工作。实际上,在 C# 代码中调用我应该声明什么样的类型并将其传递给 C# 方法?

感谢您的帮助,并对任何愚蠢的问题感到抱歉。

0 投票
5 回答
398 浏览

c++ - 如何使 void** 指向函数?

我的代码如下所示:

我需要使 void** pFunction 参数指向一个函数,以便调用者可以通过 pFunction 指针使用这个函数。这个函数是通过 DLL 调用的,我不想这样做,但由于很多原因我别无选择。我知道COM是为此而设计的,但我不能使用它,原因归结为管理。

在这一点上,我不知道该怎么做,我所做的一切都给我带来了演员问题。有谁知道我该怎么做?如果不清楚,我可以发布更多内容。

谢谢。

0 投票
4 回答
4863 浏览

c++ - 在 MSVC 中对 void * 执行指针运算时出错

我不跟。GCC 从不抱怨 void * 指针算术,即使在-ansi -pedantic -Wall. 有什么问题?

这是代码-

0 投票
9 回答
146261 浏览

c - C中void指针的指针算法

当指向特定类型(例如int, char, float, ..)的指针增加时,它的值会增加该数据类型的大小。如果void指向大小数据的指针x递增,它如何指向x前面的字节?编译器如何知道添加x指针的值?