int compare ( const void* a, const void* b )
{
printf("comparing %d < %d\n", *(int*)a
, *(int*)b
); return *(int*)a - *(int*)b;
}
void test()
{
int a=6, b=2, c=5;
void** pv
= malloc (3*sizeof (void*));
if (pv)
{
pv[0] = &a; pv[1] = &b; pv[2] = &c;
printf ("%d %d %d\n", pv
[0] == &a
, pv
[1] == &b
, pv
[2] == &c
); printf ( "before sorting: %d(%p) %d(%p) %d(%p)\n", *(int*)pv
[0], pv
[0], *(int*)pv
[1], pv
[1], *(int*)pv
[2], pv
[2] ); qsort ( pv
, 3, sizeof(void*), compare
); printf ( "after sorting: %d(%p) %d(%p) %d(%p)\n", *(int*)pv
[0], pv
[0], *(int*)pv
[1], pv
[1], *(int*)pv
[2], pv
[2] ); }
}
int main(void)
{
test();
return 0;
}
aW50IGNvbXBhcmUgKCBjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiICkKewogICAgcHJpbnRmKCJjb21wYXJpbmcgJWQgPCAlZFxuIiwgKihpbnQqKWEsICooaW50KiliICk7CglyZXR1cm4gKihpbnQqKWEgLSAqKGludCopYjsKfQoKdm9pZCB0ZXN0KCkKewoJaW50IGE9NiwgYj0yLCBjPTU7Cgl2b2lkKiogcHYgPSBtYWxsb2MgKDMqc2l6ZW9mICh2b2lkKikpOwoJCglpZiAocHYpCgl7CgkJcHZbMF0gPSAmYTsgcHZbMV0gPSAmYjsgcHZbMl0gPSAmYzsKCQlwcmludGYgKCIlZCAlZCAlZFxuIiwgcHZbMF0gPT0gJmEsIHB2WzFdID09ICZiLCBwdlsyXSA9PSAmYyApOwoJCXByaW50ZiAoICJiZWZvcmUgc29ydGluZzogJWQoJXApICVkKCVwKSAlZCglcClcbiIsICooaW50KilwdlswXSwgcHZbMF0sICooaW50KilwdlsxXSwgcHZbMV0sICooaW50KilwdlsyXSwgcHZbMl0gKTsKCQlxc29ydCAoIHB2LCAzLCBzaXplb2Yodm9pZCopLCBjb21wYXJlICk7CgkJcHJpbnRmICggImFmdGVyIHNvcnRpbmc6ICVkKCVwKSAlZCglcCkgJWQoJXApXG4iLCAqKGludCopcHZbMF0sIHB2WzBdLCAqKGludCopcHZbMV0sIHB2WzFdLCAqKGludCopcHZbMl0sIHB2WzJdICk7CgkJZnJlZShwdik7Cgl9Cn0KCmludCBtYWluKHZvaWQpCnsKCXRlc3QoKTsKCXN5c3RlbSgicGF1c2UiKTsKCXJldHVybiAwOwp9