我试图用qsort
排序二维数组C中的排序工作的二维数组,但我得到了警告:警告而排序与快速排序
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;
}
我对堆栈溢出阅读this post,但我仍然不知道我应该如何改变比较功能。
我有一个数组,看起来像这样:
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被填充后。
请注意,如果数组中的值非常大并且符号相反,那么使用像这样的减法会有溢出和随后的未定义行为的风险。实际上,这通常不是问题,但要谨慎。使用'return(a [1]> b [1]) - (b [1]> a [1]);'或'可以返回-1,0或+1。或者你可以用等效但更清晰的方式做到:'if(a [1]> b [1])返回+1;否则如果(a [1]
@JonathanLeffler注意和更新。感谢您的关注。 – WhozCraig
为什么赋值const int(* a)[2] = pa;'给出警告? – haccks