C语言,关于字符数组指针和二级指针以及qsort函数中的cmp函数的问题

问题描述 投票:0回答:1
//Sort character array lexicographically (main code):
char* words[MAX_SIZE];
qsort(words, len, sizeof(char*), cmp);
int cmp(const void* w1, const void* w2) {
    char** str1 = w1;
    char** str2 = w2;
    return strcmp(*str1, *str2);
    //return strcmp(w1, w2);
}

为什么cmp函数必须定义辅助指针才能正常输出?为什么不能直接返回strcmp(w1, w2);? 请!救命!

我的理解是w1和w2是指向字符串头指针(words[i])的指针(words),\是指针的指针,需要解引用才能比较。 是吗?

c pointers function-pointers qsort cmp
1个回答
0
投票

qsort
的比较函数传递两个成员的地址进行比较。由于数组包含类型为
char *
的元素,因此这些成员的地址具有类型
char **

strcmp
函数需要一对
char *
,因此每个
const void *
参数必须首先转换为预期的
const char **
类型并取消引用以获得
strcmp
的正确类型。

© www.soinside.com 2019 - 2024. All rights reserved.