问题标签 [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 投票
2 回答
5099 浏览

c++-cli - void* 到 C++/CLI 中的 Object^

我正在将大量 .h 和 .lib 文件从本机 C++ 包装到托管 C++ 以最终用作 C# 中的引用 .dll。

一些本机 C++ 函数的返回类型为 void*。当我将值传回我的调用代码时,我不确定如何处理这个问题。例如:如果 C# 应用程序调用我的 dll 包装器,我从本机调用返回什么:

我目前正在尝试将返回装箱在通用 System::Object^ 中,但没有成功。这是包装器中的调用:

任何人都可以提供解决方案吗?

0 投票
6 回答
12021 浏览

c - C: 通过 void 返回的函数 *

来自 Java,我对使用 Void 允许以下返回值感到困惑:

这是返回一个指向分配内存的指针吗?

0 投票
7 回答
71775 浏览

objective-c - Objective-C: id 和 void * 的区别

id和 和有什么不一样void *

0 投票
5 回答
25004 浏览

c - 如果我有一个 void 指针,如何将 int 放入其中?

我有一个任意值的数组,所以我将它定义为一个 void 指针数组,所以我可以指向任何类型的信息(如int字符数组等)。但是,我如何实际分配int给它?

以这些初始化为例:

我的直觉会这样认为,但这会产生编译错误:

我也考虑过使用&x,但我会获取一个局部变量的地址,(据我所知)在退出过程后会被清除。因此,如果我有一个局部变量x,我将如何正确地将其转换为 void 指针类型的变量?

0 投票
3 回答
8069 浏览

c - 错误:从 'void (*)(...)' 到 'void (*)()' 的无效转换

在使用 gcc 4.0.1 build 5370、XCode 2.5 的 Mac 上遇到此问题。代码片段是:

有一个声明的函数,第二个参数导致问题:

像这样称呼它:

导致第三行的错误。看起来 'void func(void)' 与 gcc 4.0.1 的 'void func()' 不同

关于任何 gcc 开关或只是 gcc 更新的任何想法都会有所帮助吗?感谢Honza B的帮助。

0 投票
18 回答
153670 浏览

c++ - 错误:从 'void*' 转换为 'int' 失去精度

我有一个带有原型的函数,void* myFcn(void* arg)它用作 pthread 的起点。我需要将参数转换为 int 以供以后使用:

编译器(GCC 版本 4.2.4)返回错误:

投射这个的正确方法是什么?

0 投票
1 回答
771 浏览

c# - 实现 Win32 FileWrite

我通过带有签名的 Write(..) 方法来实现这一点:

正如我通过查看本文了解到的(讨论了读取对应项的使用),我需要在我的代码中实现一个 while 循环,因为缓冲区的写入/读取可能不会一次性完成。这是问题开始的地方:

如果我想保留我的 C# 方法签名以接受 void*,这与链接的读取示例不同,其中字节 * 被接受为缓冲区的参数。

这意味着在通过 WriteFile 一次之后,我应该将我的 void* 移动到尚未写入的缓冲区的开头。我显然不能通过仅使用包含写入字节数的 uint 增加 void* 来做到这一点......我知道 void* 没有预定的大小,因此增加是不可能的,但我想知道我应该如何实现我正在努力做。

0 投票
2 回答
1072 浏览

c# - 指针算法和 C# 编译器

为了学习,我最近查看了一个使用 Win32 WriteFile 的现有程序集(使用 Reflector)。实现是:

}

实际上是最后两行有问题......首先,编译器抱怨您不能将 uint 强制转换为 void*。此外,不可能在 void* 上使用 += 甚至 + ,因为它的大小未知。

上面的代码确实有效,但最后几行仍将编译为:

我不明白为什么并且非常想知道为什么编译器会以这种方式运行:

  1. 为什么它会生成这样的演员表(为什么不接受在用户编写的代码中这样做)?
  2. 第一个示例中 void* 上的 += 运算符是怎么回事?哪些原始代码代码生成了缓冲区 += (void*)wrtn 其中缓冲区也是 void* ????
0 投票
7 回答
20841 浏览

c++ - 找出 C++ 空指针的类型

我有一个小问题:如何找出 C++ 指针的类型?

我经常在我的控制台程序中使用一个小函数来收集输入,它看起来像这样:

我想创建一个通用表单,使用 void 指针,但我不能 cin 一个 void 指针,那么如何找出它的类型以便我可以转换它?

0 投票
4 回答
6010 浏览

c - C: 深拷贝 - 带有 void 指针的结构

我有一个以下结构

是否可以对包含 void 指针的结构进行深层复制?我假设我不知道data指针指向多少字节?所以我不能 malloc 指定的字节数并做 memcpy。我对吗?