我試圖用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