Static_cast和传递void指针
static_cast and passing void pointers c++
void function(void * array, size_t itemsInArray, size_t sizeOfEachItem, int(*compare)(const void*, const void*))
char * array_ptr = static_cast<char*>(array);
char * ptr1 = items_ptr;
char * ptr2 = items_ptr + 1;
void * array_ptr_void1 = static_cast<void*>(ptr1);
void * array_ptr_void2 = static_cast<void*>(ptr2);
compare(array_ptr_void1, array_ptr_void2);
所以我这里的代码基本上是我想要完成的,但我显然不理解void指针并将它们传递给比较函数。我基本上想做的是将void指针转换为char指针,这样我就可以通过它进行自增。然后我想传递一个特定的部分给比较函数。我只是真的需要有人向我解释我想做的事情背后的逻辑,因为我似乎不理解传递void指针到比较函数。我不能改变函数原型。我的问题不是关于通过char指针递增,我理解这部分,我只是使用item_ptr和item_ptr+1来演示传递数组的特定部分。当我发送到要比较的部分时,最后一行代码会中断,因此我需要了解逻辑中的缺陷。谢谢!
从你的问题中我明白了。有多个版本的compare函数具有不同的函数名,但都使用void指针作为参数。这些函数用来处理不同类型的数据。
你的函数是使用这些比较函数来比较数组。我认为你的功能还不完善。
如果items_ptr是char*类型,你应该使用
char * ptr1 = items_ptr;
char * ptr2 = items_ptr + sizeOfEachItem;
如果我没有错的话,你是在使用items_ptr循环/遍历array_ptr所指向的缓冲区(数组)。
如果是这样,不要使用+ 1去下一个项目,而是使用+ sizeOfEachItem。如果你想获取第n个元素,使用array_ptr + n*sizeOfEachItem
相关文章:
- 如何在 C++ 中将 void 函数传递给 void 指针
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- C++为 void 指针分配一个字符串
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 取消引用 void 指针以将值分配给结构
- C 与 C++,处理 void** 指针
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 用非零值初始化void指针的正确(或最安全)方法
- 将 void 指针分配给另一个 void 指针
- c ++ 我是否需要手动删除指向另一个具体类型的 void* 指针?
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何将 std::string 赋回作为 <char>void* 指针传递的 std::vector.data()?
- 将指针传递到结构,与传递 void 指针并强制转换为结构
- 如何在void*指针下检查运行时类型(允许简单类型,没有基类)?
- 用于初始化结构的 void 指针强制转换
- 使用 void 指针:void **ptr.. 如何修改共享内存的值?
- 访问由 void 指针引用的结构的成员
- 你不能在 void 指针上使用指针算法,那么 void 指针数组是如何工作的呢?
- 如何警告 C 中 void 指针上的参数不兼容的类型
- 指向类模板方法的 void 指针的向量