int compare(const void *a, const void *b)
{
const char **str_a = (const char **)a;
const char **str_b = (const char **)b;
return strcmp(*str_a, *str_b);
}
我知道這個函式將指標陣列的內容與字串進行比較。但我不知道里面發生了什么 - 我對**, 為什么使用它感到困惑?
uj5u.com熱心網友回復:
這是bsearch/所需的典型回呼函式qsort,它傳遞兩個指向陣列項的指標,由該函式進行比較。如果第一項被認為小于、等于或大于第二項,則它回傳小于零、零或大于零。
現在讓您需要搜索/排序的陣列是一個指標陣列,例如典型的字串陣列:char* arr[] = { "hello", "world" };
那么這個陣列中的每一項都是一個char*. 意思是bsearch/qsort將一個指向字符指標的指標傳遞給const char**回呼函式。
由于void*特別是一個通用指標,這很好。我們被允許來回const char**轉換const void*。但是我們不能用 a 做任何有意義的事情,const void*所以需要將它轉換為預期的型別,然后取消參考,以便strcmp得到兩個const char*預期的引數。
uj5u.com熱心網友回復:
該函式期望引數是指向指標的指標。示例使用:
const char *a = "string";
const char *b = "string";
int result = compare(&a, &b);
另一個例子:
int main(int argc, char *argv[]) {
assert(argc >= 3);
return compare(&(argv[1]), &(argv[2]));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487787.html
上一篇:如何使用prinf()列印函式?
