qsort
인데 배열 v
의 각 멤버가 sizeof(void *)
을 차지하는 경우 qsort
은 sizeof(int)
을 사용해야하는 이유는 무엇입니까?qsort void 포인터에 대한 포인터가
#include <stdio.h>
#include <stdlib.h>
int comp(const void *pa, const void *pb)
{
int a = *(int *)pa;
int b = *(int *)pb;
if (a > b)
return +1;
else
if (b > a)
return -1;
else
return 0;
}
int main(void)
{
int i, a[] = {3, 1, 2, 0, 4};
void **v;
v = malloc(sizeof(void *) * 5);
for (i = 0; i < 5; i++) {
v[i] = &a[i];
}
for (i = 0; i < 5; i++) {
printf("%d\n", *(int *)v[i]);
}
qsort(v[0], 5, sizeof(int), comp); // why sizeof(int) if v is void **
printf("Sorted:\n");
for (i = 0; i < 5; i++) {
printf("%d\n", *(int *)v[i]);
}
free(v);
return 0;
}
David : 코드에서'v [i] = &a[i];'표현식을 이해하고 있습니까? 왜 이것이 필요하며 왜'v'가'void *'입니까? –
@GrijeshChauhan, 다른 유형을 정렬하기 위해 void ** (일반 컨테이너의 추상화로서)를 사용해야합니다. –
'[[]]을 정렬하기 때문에'v [i] = & a [i]'가 필요합니다. 'array, 그러나'qsort()'호출에서 배열'a [] '의 타입을 포함하지 않는'v'를 넘겨 주므로'a [i]'요소가'int'라는 내용 정보를 명시 적으로 전달합니다 . –