给定一个具有参数void * X的函数,如何将整数数组x作为参数传递,并将该函数中的局部整数变量y设置为X?
...
int x[2];
x[0] = 1;
x[1] = 2;
foo((void*)x);
...
/*foo function:*/
void foo(void *X) {
//I want a local variable y (integer array) to be set to X
}
答案 0 :(得分:2)
你只需要声明一个int *
指针并为其指定void *
指针,就像那样简单
void foo(void *X) {
int *x;
x = X;
if (x == NULL) /* prevent NULL dereference */
return;
}
并且不需要f((void *)x);
,您可以使用f(x);
此外,根据您的需要,您可能需要创建一个结构并将指针传递给结构,该结构包含您的数组可以容纳的项目数,这将更安全,并且需要维护。
这是C11草案1570的引用
§6.3.2.3Poitners
- 指向
醇>void
的指针可以转换为指向任何对象类型的指针。指向任何对象类型的指针可以转换为指向void
并再次返回的指针;结果将与原始指针进行比较。