【发布时间】:2020-07-25 10:27:00
【问题描述】:
我想写一个函数,它接受一个void*“pairs”数组——每个都是一对指向某物的指针。每对中的第一个元素是字符串,第二个元素是指向其他内容的指针。
我希望传递给函数的数组声明如下:
<what type?> argument = {
{ "some string", <some pointer>},
{ "some other string", <some other pointer>},
// ... etc
NULL // To signal ending
}
function(argument);
在function 中,我想遍历数组,访问每个“对”,将“对”的成员转换为它们各自的类型(我知道)并利用这些成员。
我遇到了一些麻烦。起初,我尝试将参数声明为void* thing[][]。认为它是void 指针数组的数组。
但是,只是尝试访问此类数组中的索引会给我错误:expression must be a pointer to a complete object type。
阅读 SO,我意识到编译器认为我正在尝试取消引用 void*。但我认为在这样的数组上执行a[0] 将访问数组中的第一个“对”,这应该取消引用void** - 这是合法的。我错了吗?
就数组的类型、初始化以及在迭代期间解包数组的方式而言,解决此问题的正确方法是什么?
【问题讨论】:
标签: c arrays void-pointers