问题标签 [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.
c - 铸造空指针
我在较旧的 C 代码中看到了很多以下内容:
malloc()
从它返回的指针转换有什么意义void *
?是不是因为较旧的 C 编译器不支持 void 指针并malloc()
使用返回char *
来代替?
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++
c - C 中使用 void* 的通用可编辑函数
我遇到了一些问题。
我需要编写一些类似的函数memcpy(void*, const void*)
,它的签名应该是:
memcpy
我注意到,在arrayCopy
许多structs
.
那么,我该如何实现呢?
编辑:源代码可能是这样的:
谢谢。
porting - 移植问题:VC++ 中带有偏移的指针
好的,这在 Linux 下的 GCC 中编译得很好。
但是,由于线路原因,我在将其移植到 Windows 时遇到了问题...
作为一个 void 指针,VC++ 不想偏移指针。CPP 不允许指针偏移的通常警告应该没有实际意义,因为整个项目是在 extern "C" 下构建的。
现在,这只是许多功能中的一种,找到答案将使它们全部得到修复。我真的不想从头开始重写库项目,我不想在 MinGW 下构建。必须有一种方法可以做到这一点,我错过了,在谷歌中找不到。
c++ - 在删除之前在 C++ 中测试 void 指针
我在 C++ 中有一个数组:
它在它所在的类的构造函数中初始化。
在析构函数中我有:
除了通过 Valgrind 测试程序时,它说有一些删除 void 指针的调用:
我想在调用 delete 之前测试 playerArray 是否为空指针以避免此错误。
有谁知道如何做到这一点?
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,然后将它们增加宽度,它会起作用吗?不过,我不确定分配将如何工作。
c++ - 在 C++ 中放松 void * 铸造
在 C 中,将指针转换为void *
.
移植到 C++ 的一个主要障碍是在从处理泛型指针(malloc
例如void *block_get(Blkno const blkno);
.
但是,我的代码旨在由 C和C++ 编译器成功编译。如果我为了 C++ 而在任何地方都提供了显式转换,那么它们必须是 C 风格的转换,并且由于在两种语言的指针类型之间转换非指针类型,我可能会掩盖错误。
我的参考错误如下:
在 MSVC 中产生:
错误 2 错误 C2440: 'initializing' : 无法从 'void *' 转换为 'Cpfs *' e:\src\cpfs\cpfs.c 179
显然我不能使用new
,或者static_cast
如果我不再使用 C,我自然会使用它。为每种语言提供最大类型安全性的最佳方法是什么?void *
c - 空指针的大小
为什么是sizeof
空指针2
?
c++ - 替换 realloc (C --> C++)
在较早的问题中,我询问了类型转换指针,但被引导到使用 C++ 分配系统而不是 mallocs 的更好解决方案。(我正在将一些 C 代码转换为 C++)
但是,我仍然有类似功能的问题:
我变了:
和
但是,我如何在以下函数中使用 realloc:
我收到以下错误:
编辑2:
好的,我得到的共识是我应该放弃我目前的解决方案(我愿意这样做)。
只是为了确保我理解正确,你们的意思是,我应该只拥有一个包含对象本身的向量,而不是指向对象的指针数组?
c - void * 赋值问题
我想使用指针算法从数据包结构中获取一些字段。但是下面的代码有什么问题?
在第一种情况下,我认为如果我从数据包的开头开始 4 个字节(2 个短字段),我会得到 tLow。但它没有给出预期值。另外,第二种情况我想通过从数据包的开头开始 12 个字节来获取数据字段。什么我的想法有问题吗?