2014-12-22 2 views
-1

void 포인터 배열의 값을 다른 함수에 전달하는 방법은 무엇입니까?c void 포인터 배열 인쇄

함수 파라미터의 의미는 요소

  • 배열 요소 크기 (E)의 배열

    1. 무효 포인터이다. 지. 배열 요소 크기의 sizeof(int)

    내가 어떻게 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); 
    } 
    

    방법 sorting()pf() 함수 배열 값을 전달? 바이트 단위로 측정 I -, 각 요소의 크기를 알고

    쉬운 방법은 (int *)p[j],하지만 난 당신의 함수에서 두 값 유형 (double, int)

  • +0

    @iharob 흠 ... 나는 * (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