比较 qsort() 的二维数组

Comparing two-dimensional array for qsort()

我想用 qsort(...) 对 2D int 数组进行排序,但我的比较函数似乎是错误的。 qsort的参数如下:

qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

我的二维数组比较函数:

int compareArray2D ( const void *pa, const void *pb ) {
   const int a = (const int **)pa;
   const int b = (const int **)pb;
   if (a[0] == b[0]) {
      return a[1] - b[1];
   } else {
       return a[0] - b[0];
   }
}

然而,使用以下函数对一维数组进行排序有效:

int compareArray (const void * a, const void * b) {
    return ( *(int*)b - *(int*)a );
}

其实第一个功能出了问题,不知道怎么解决。谢谢你的提示。

你需要a和b是指针才能使用数组下标。尝试这样的事情;

int compareArray2D ( const void *pa, const void *pb ) {
   const int* a = pa;
   const int* b = pb;
   if(a[0] == b[0]) {
      return a[1] - b[1];
   } else {
       return a[0] - b[0];
   }
}