qsort的比較函式傳遞引數注意事項

2021-06-28 06:28:08 字數 630 閱讀 4316

使用qsort進行快速排序過程中需要傳遞乙個比較函式,這個函式有兩個引數,形如const void *a, const void *b,具體轉換成哪種型別就要看情況了。

若是整形陣列,則在比較函式中進行如下轉換,*(int *)a , *(int *)b;

若是double,則在函式中進行如下轉換,*(double *)a, *(double *)b;

但是有兩種特殊情況。

一是二維字元陣列

這個轉換是這樣的,strcmp((char *)a, (char *)b)

二是字元指標陣列

這個轉換是這樣的,strcmp(*(char **)a, *(char **)b);

如何理解呢?

我覺得指標是乙個陣列,具體轉換成哪種型別,就要看我們需要什麼型別,以及指標值表示的位址所在位置。

所以二維字元陣列,比如char a[200][2],是如下形式:

所以a指向開頭,&a[1] 指向第二塊,我們在引數要做的就僅僅是轉換成char *s型別即可。

而指標陣列又是另外一回事了。比如char *a[200],形如

[0x1bcaa][0xaaaa]

所以a指向第乙個元素,&a[1]指向第二個元素,我們在引數要做的就是轉換成*(char **)即可。

qsort函式的比較函式用法

七種qsort 排序方法 本文中排序都是採用的從小到大排序 一 對int 型別陣列排序 int num 100 sample int cmp const void a const void b qsort num,100,sizeof num 0 cmp 二 對char 型別陣列排序 同int 型別...

給陣列物件sort函式傳遞比較函式引數的一點反思

首先來看乙個例子 下面我們來分析控制台輸出的結果 首先我們要清楚在每個函式內部有兩個特殊的引數arguments和this,arguments是乙個類陣列物件,包含著傳入函式中所有的引數,arguments 0 可取到傳入函式的第乙個引數,arguments 1 可取到傳入函式的第二個引數,以此類推...

list的排序和比較函式作為引數傳遞

前幾天使用list的排序功能,出現了一點問題,來總結一下。定義乙個簡單的節點類,包含乙個字串和乙個整數,並過載了小於操作,根據整數的大小進行比較。class node void print friend bool operator const node n1,const node n2 public...