关于字符串数组的C中的qsort

时间:2015-01-24 11:06:06

标签: c arrays string pointers qsort

我尝试使用qsort按字母顺序对字符串数组进行排序。

当我使用comp1时,它会将参数转换为char**,但效果很好 但是,如果我使用的是comp2,而不是char*

为什么呢?我无法理解comp1comp2之间的区别。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int comp1(const void *a, const void *b) {
    const char **pa = (const char **)a;
    const char **pb = (const char **)b;
    return strcmp(*pa, *pb);
}
int comp2(const void *a, const void *b) {
    const char *pa = (const char *)a;
    const char *pb = (const char *)b;
    return strcmp(pa, pb);
}
void main(void) {
    char *array[] = {"c","b","a"};
    int size = sizeof(array)/sizeof(char *);
    int i;
    qsort(array,size,sizeof(char *),compX);
    //compX is comp1 or comp2
    for(i=0;i<size;i++){
        printf("%s",array[i]);
    }
}

输出

abc←当我使用comp1

cba←当我使用comp2

1 个答案:

答案 0 :(得分:1)

你的数组是一个指向字符串的指针数组 由于比较器函数总是获得指向已排序元素的开头的指针,这意味着它会获得void* 指向 char*这些字符串。

void*投放到char*显然是一个间接性太少。