pointers - 使用qsort对 2D array 进行排序时警告

  显示原文与译文双语对照的内容
102 2

我正在尝试使用 qsort 对 2D 中的array 进行排序。 排序工作正常,但我得到警告:

warning: initialization discards 'const' qualifier from pointer target type [enabled by default]

如何修改比较函数以消除警告( 给定 qsort 需要参数的情况下) const void *pa, const void *pb


int cmp (const void *pa, const void *pb ) {
 const int (*a)[2] = pa;//warning here
 const int (*b)[2] = pb;//warning here
 if ( (*a)[1] <(*b)[1] ) return 1;
 if ( (*a)[1]> (*b)[1] ) return -1;
 return 0;
}

我已经读过这篇文章,在堆栈溢出,但我仍然不确定应该如何改变比较功能。

我有一个 array,看起来像这样:


int letterCount[26][2] = {{0, 0},{1, 0},{2, 0},{3, 0},{4, 0},{5, 0},{6, 0},{7, 0},{8, 0},{9, 0},{10, 0},{11, 0},{12, 0},{13, 0},{14, 0},{15, 0},{16, 0},{17, 0},{18, 0},{19, 0},{20, 0},{21, 0},{22, 0},{23, 0},{24, 0},{25, 0}};

除了第二列,而不是零,它们是用其他数字填充的。 在第二列填充 0s 之后,我正在尝试对这 2d array 进行排序。

时间: 原作者:

99 1

你可以使用decls玩具,但最后我认为这将适用于你所使用的比较器:


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

你的数据"项目"只是 2D array 中的int[] 偏移量。 这是一个指针 array 而不是真正的2D array,这将是相当不同的。 Grijesh非常接近这个,只缺少 [1] 偏移,如果他恢复他的答案,我就把它放下来。

原作者:
136 3

这跟 (*a)[2] 有什么关系? 似乎你在声明中引用了一个指向 array的指针。 为了缺少更好的事情,我写了自己的版本,希望它能帮助你:


#include <time.h>
#include <stdio.h>
 void Qsort(int matrix[][2], int lenght)
 {
 if(!lenght)
 return;
 int temp = 0, pivot, b = 0, e = lenght - 1, test = 0;
 const int MIN =0, MAX = e;
 srand(time(NULL));
 test = (rand() % (MAX - MIN + 1)) + MIN;
 pivot = matrix[test][1];
 while(b <e)
 {
 while(matrix[b][1] <pivot)
 b++;
 while(matrix[e][1]> pivot)
 e--;
 temp = matrix[b][1];
 matrix[b][1] = matrix[e][1];
 matrix[e][1] = temp;
 }
 Qsort(matrix, b);
 Qsort(&(matrix)[b + 1], lenght - 1 - b);

 }

...