c void指针数组打印

时间:2014-12-22 11:23:56

标签: c arrays pointers void

如何将void指针数组的值传递给其他函数?

函数参数的含义是

  1. void指向元素数组的指针
  2. 数组元素大小,e。 G。 sizeof(int)
  3. 数组元素数量
  4. 我如何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],但我想使用两种值类型(doubleint

1 个答案:

答案 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],因为它们是等效的。