繁体   English   中英

关于C语言中用于字符串数组的qsort [重复]

[英]About qsort in C for string array [duplicate]

这个问题已经在这里有了答案:

我正在尝试使用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

您的数组是一个指向字符串的指针数组。
作为比较函数总是很指针排序元素的开始,这意味着它变得void* 哪个 char*那些字符串。

将那些void* char*转换为char*显然是一种间接的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM