【发布时间】:2015-03-23 08:55:39
【问题描述】:
我正在尝试使用 qsort 按字母顺序对字符串数组进行排序。
当我使用comp1 时,它将参数转换为char**,它运行良好。
但如果我使用comp2 则不会,它会转换为char*。
为什么?我无法理解comp1 和comp2 之间的区别。
#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时
【问题讨论】:
-
顺便说一句,它是
int main并且不需要从void*到其他一些数据指针类型的显式转换,也不应该在C 中完成。另外,避免将类型传递给@ 987654331@ 而不是表达式,这很容易出错。
标签: c arrays string pointers qsort