qsort中的return *(char *)a - *(char*)b;和return (strcmp((char*)a,(char*)b));等价么?

如题所述

不等价,*(char *)a - *(char*)b比较的是字符串a, b的第一个字符。
strcmp((char*)a,(char*)b)比较的是字符串的所有字符。追问

那int型数组和char型数组比较是采用的是第一种啊,为什么?

追答

那个不是比较整个数组,而是比较数组里的一个元素。

温馨提示:内容为网友见解,仅供参考
无其他回答

...*)a - *(char*)b;和return (strcmp((char*)a,(char*)b));等价...
strcmp((char*)a,(char*)b)比较的是字符串的所有字符。

return *(char *)a - *(int *)b; return (*(In *)a)->data > (*(In...
return (*(In *)a)->data > (*(In *)b)->data ? 1 : -1;(In *)a已经不是指针了,后面不能用"->"而要用"."

C语言:strcmp(*(char**)a,*(char**)b))
的差别在于strcmp((char*)a,(char*)b))中的a和b已经是某种类型的指针(不是指针的指针)了,就无需先强制转换成char **了,只需要转换成char * 就可以了 最后一个:return(*(char *)a-*(char *)b),是把指针a和b转换成char * 然后解引用一次后就得到了指针所指向的字符了,返回的值是两...

qsort函数使用方法总结(详细全面+代码)
使用`strcmp`比较字符串,传入`arr`时,理解为指向数组第一个元素的指针。参数`arg1`和`arg2`指向`"指向常量字符串的指针"`的指针,即`char**`。传给`strcmp`的是指向字符串的`char*`。转换`void*`为`char**`,解引用得到`char*`赋值给`a`和`b`。调用`strcmp`比较`a`和`b`。字符串二维...

qsort具体用法
return 0;} 2、对字符串排序:int Comp(const void *p1,const void *p2){ return strcmp((char *)p2,(char *)p1);} int main(){ char a[MAX1][MAX2];initial(a);qsort(a,lenth,sizeof(a[0]),Comp);\/\/lenth 为数组a的长度 3、按结构体中某个关键字排序(对结构体一级排序):...

学生寝室管理系统设计与实现 数据结构
{void input(student *,int);void display(student *,int);void add(student *,int &,int);<br>void qsort(student *,int,int);void del(student *,char *,int &);void change(student *,char *,int );<br>void search(student *,int,int,int);<\/p><p>int stunum,choose;<br>...

qsort举例
return strcmp((char *)a, (char *)b);} 接着,对一个包含两个字符串字段的结构体进行排序:c typedef struct { char str1[11];char str2[11];} str, *stri;str strin[100001] = ...;int compare(const void *a, const void *b){ return strcmp(((str*)a)->str2, ((str*)b...

C语言当中的qsort函数
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 其实c中的函数不用死记,知道有这个函数及其功能就可以了,然后有用的时候,...

C语言qsort函数对char型str[m][n]数组的排序
int cmp(const void *a, const void *b){ char *aa = (char *) a;char *bb = (char *) b;return strcmp(aa,bb);} \/\/ const void *a是表示一个指向const void的指针,可以指向任意的类型,但是不能修改。这就需要将其强制转化。\/\/ 因为是针对char型的二维数组,也就是说你排序的时候...

c语言qsort 问题
January","February","March","April","May"};int i;qsort(s,5,sizeof(char)*10,cmp);for(i=0;i!=5;i++)printf("%s\\n",s[i]);return 0;} int cmp(const void *a,const void *b) \/\/注意这里的const void *b { return (strcmp((char *)a,(char *)b));} ...

相似回答
大家正在搜