2014-12-22 6 views
-1

Как передать значение массива указателей пустоты в другую функцию?c печать строки указателя void

Значение параметров функции является

  1. недействительным указатель на массив элементов
  2. размер элемента массива, е. г. sizeof(int)
  3. количество элементов массива размером

Как printfvoid указатель массива?

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

@iharob hmm ... я думаю * (void *) (p + sz * i), как это будет работать, сделать 2 функции только способом? – user2637015

+0

@barakmanos это ошибка – user2637015

+1

http://stackoverflow.com/a/27269430/971127 – BLUEPIXY

ответ

1

В функции, вы знаете размер каждого элемента - измеряется в байтах, я. е. в терминах 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], так как они эквивалентны.

+0

"* ... чтобы иметь возможность рисовать арифметику ... *" ... вы можете как заменить все 'p' на' pp', но определение 'p' и его первое появление. – alk

+0

@alk Конечно, спасибо. Вот что было предназначено ... – glglgl

Смежные вопросы