uint16**类型的实参与void**类型的形参不兼容要如何处理
时间: 2024-08-15 17:04:22 浏览: 49
在C/C++中,`uint16_t**`是指向`uint16_t`指针的指针,而`void**`则是指向任意类型指针的指针。由于它们所指向的数据类型不同,直接作为函数参数传递通常是不兼容的。如果你想从`uint16_t**`传递给`void**`,你需要确保底层的数据能够隐式转换或者显式地转换为`void`指针。
例如,如果你确实需要这种转换,可以这样做:
```c
void handle_generic_ptr(void** ptrs, int count) {
for (int i = 0; i < count; ++i) {
// 首先检查是否真的指向的是uint16_t*
if (ptrs[i] && ((uint16_t*)ptrs[i])->size == sizeof(uint16_t)) {
// 如果是,我们可以安全地将其转换为void*并操作
uint16_t* casted_ptr = (uint16_t*)ptrs[i];
// ...进行操作...
} else {
// 否则,可能是其他类型,需特殊处理或报错
// ...
}
}
}
// 调用时,将uint16_t**传递,并指定实际的数量
void some_function(uint16_t** uint16_ptrs, int count) {
void** generic_ptrs = malloc(count * sizeof(void*));
for (int i = 0; i < count; ++i) {
generic_ptrs[i] = (void*)uint16_ptrs[i]; // 将指针强转
}
handle_generic_ptr(generic_ptrs, count);
free(generic_ptrs); // 不要忘记释放内存
}
阅读全文