如何将void指针数组的值传递给其他函数?
函数参数的含义是
sizeof(int)
我如何printf
void
指针数组?
void sorting(void* p, int sz, int n, int (*pf)(void*, void*))
{
int i, j;
for (i = 0; i < n - 1; ++i)
for (j = i + 1; j < n; ++j)
if (pf(/*?*/, /*?*/) > 0)
/*swap function*/
}
int cmp_int(void* p1, void* p2)
{
if (*(int*)p1 < *(int*)p2) return -1;
if (*(int*)p1 > *(int*)p2) return +1;
return 0;
}
int cmp_dbl(void* p1, void* p2)
{
if (*(double*)p1 < *(double*)p2) return -1;
if (*(double*)p1 > *(double*)p2) return +1;
return 0;
}
int main(void)
{
int a[] = { 4, 3, 2, 6, 5, 1, 7, 8 };
int an = sizeof(a) / sizeof(*a);
double b[] = { 4.4, 6.6, 2.2, 3.3, 8.8, 1.0, 0.0 };
int bn = sizeof(b) / sizeof(*b);
int i;
sorting(b, sizeof(double), bn, cmp_double);
sorting(b, sizeof(int), an, cmp_int);
}
如何将数组值传递给pf()
中的sorting()
函数?
简单方法是(int *)p[j]
,但我想使用两种值类型(double
,int
)
答案 0 :(得分:1)
在你的函数中,你知道每个元素的大小 - 以字节为单位,i。即就char
而言 - 并希望现在适当地传递它。
为了能够使用void *
执行指针算术,您必须将其转换为char *
。
这样(或类似的)方式:
void sorting(void* p, int sz, int n, int (*pf)(void*, void*))
{
char * pp = p; // to be used with pointer arithmetics
int i, j;
for (i = 0; i < n - 1; ++i)
for (j = i + 1; j < n; ++j)
if (pf(pp + sz * i, pp + sz * j) > 0)
/*swap function*/
}
而不是pp + sz * i
,您也可以写&pp[sz * i]
,因为它们是等效的。