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

c - 铸造空指针

我在较旧的 C 代码中看到了很多以下内容:

malloc()从它返回的指针转换有什么意义void *?是不是因为较旧的 C 编译器不支持 void 指针并malloc()使用返回char *来代替?

0 投票
1 回答
170 浏览

c++ - 关于指针的有趣问题..请帮助

Sixeof(ptr) 和 Sizeof(a) 显示 4
Sizeof(int) 显示 4 而 sizeof(char) 显示 1
所以 65 存储在 4 个字节中,即
00000000 00000000 00000000 01000001 并且第一个字节的地址存储在 ptr

在上面的代码中,我将 int* 类型转换为 char* 以打印存储在 x(type int) 第一个字节中的值。

因此,在类型转换后“a”存储第一个字节地址,即包含在 ptr 中现在在显示 (int)*a 时,它应该只考虑第一个字节来显示值..??但输出是 65 而不是 0(第一个字节值)..我哪里错了..?

我学到的是

PS - 我正在开发 Dev-C++

0 投票
3 回答
316 浏览

c - C 中使用 void* 的通用可编辑函数

我遇到了一些问题。

我需要编写一些类似的函数memcpy(void*, const void*),它的签名应该是:

memcpy我注意到,在arrayCopy许多structs.

那么,我该如何实现呢?

编辑:源代码可能是这样的:

谢谢。

0 投票
1 回答
241 浏览

porting - 移植问题:VC++ 中带有偏移的指针

好的,这在 Linux 下的 GCC 中编译得很好。

但是,由于线路原因,我在将其移植到 Windows 时遇到了问题...

作为一个 void 指针,VC++ 不想偏移指针。CPP 不允许指针偏移的通常警告应该没有实际意义,因为整个项目是在 extern "C" 下构建的。

现在,这只是许多功能中的一种,找到答案将使它们全部得到修复。我真的不想从头开始重写库项目,我不想在 MinGW 下构建。必须有一种方法可以做到这一点,我错过了,在谷歌中找不到。

0 投票
3 回答
748 浏览

c++ - 在删除之前在 C++ 中测试 void 指针

我在 C++ 中有一个数组:

它在它所在的类的构造函数中初始化。

在析构函数中我有:

除了通过 Valgrind 测试程序时,它说有一些删除 void 指针的调用:

我想在调用 delete 之前测试 playerArray 是否为空指针以避免此错误。

有谁知道如何做到这一点?

0 投票
2 回答
3642 浏览

c - 使用 void 指针管理不确定类型的数组

我正在尝试以与 C 的 qsort 函数相同的方式编写自己的 Mergesort 函数。如果我正在为一组已知项目编写 MergeSort,我不会有问题,但由于我不知道它们会是什么,这让我陷入了循环。

我的教授给出的规范不希望我使用单独的函数进行合并,所以我在 Mergesort 函数本身中编写了该实现。这意味着我将拥有与 qsort() 相同的信息:

  • void* base- 指向要排序的数组的第一个元素的指针
  • size_t nel- 数组中的元素数量
  • size_t width- 每个元素的大小
  • int (*compar)( const void*, const void* )- 告诉您如何比较每个元素的功能

我遇到的问题是合并部分。我见过的每个实现都使用一个临时数组来存储排序的项目。我不习惯使用 void 指针,我发现的最大障碍是遍历数组并将值分配给数组。如何在 指向的数组中的第二个索引处找到值base?如何将该数组中的值分配到临时数组中?我将如何创建该临时数组?

如果我将 void 指针转换为 char,然后将它们增加宽度,它会起作用吗?不过,我不确定分配将如何工作。

0 投票
5 回答
2197 浏览

c++ - 在 C++ 中放松 void * 铸造

在 C 中,将指针转换为void *.

移植到 C++ 的一个主要障碍是在从处理泛型指针(malloc例如void *block_get(Blkno const blkno);.

但是,我的代码旨在由 CC++ 编译器成功编译。如果我为了 C++ 而在任何地方都提供了显式转换,那么它们必须是 C 风格的转换,并且由于在两种语言的指针类型之间转换非指针类型,我可能会掩盖错误。

我的参考错误如下:

在 MSVC 中产生:

错误 2 错误 C2440: 'initializing' : 无法从 'void *' 转换为 'Cpfs *' e:\src\cpfs\cpfs.c 179

显然我不能使用new,或者static_cast如果我不再使用 C,我自然会使用它。为每种语言提供最大类型安全性的最佳方法是什么?void *

0 投票
5 回答
61175 浏览

c - 空指针的大小

为什么是sizeof空指针2

0 投票
8 回答
10662 浏览

c++ - 替换 realloc (C --> C++)

在较早的问题中,我询问了类型转换指针,但被引导到使用 C++ 分配系统而不是 mallocs 的更好解决方案。(我正在将一些 C 代码转换为 C++)

但是,我仍然有类似功能的问题:

我变了:

但是,我如何在以下函数中使用 realloc:

我收到以下错误:

编辑2:

好的,我得到的共识是我应该放弃我目前的解决方案(我愿意这样做)。

只是为了确保我理解正确,你们的意思是,我应该只拥有一个包含对象本身的向量,而不是指向对象的指针数组?

0 投票
6 回答
638 浏览

c - void * 赋值问题

我想使用指针算法从数据包结构中获取一些字段。但是下面的代码有什么问题?
在第一种情况下,我认为如果我从数据包的开头开始 4 个字节(2 个短字段),我会得到 tLow。但它没有给出预期值。另外,第二种情况我想通过从数据包的开头开始 12 个字节来获取数据字段。什么我的想法有问题吗?