c语言qsort()函数中compare()函数参数写法
2015-03-28 18:58
218 查看
linux的man手册中提供了一个比较函数的示例:
一开始搞不懂return为什么是 * (char * const *) p1 ,后来看注释发现strcmp的原型是:
strcmp接受
但是网上的示例大多数return时并没有写的这样规范,而是写成
#include <stdio.h> #include <stdlib.h> #include <string.h> static int cmpstringp(const void *p1, const void *p2) { /* The actual arguments to this function are "pointers to pointers to char", but strcmp(3) arguments are "pointers to char", hence the following cast plus dereference */ return strcmp(* (char * const *) p1, * (char * const *) p2); } int main(int argc, char *argv[]) { int j; if (argc < 2) { fprintf(stderr, "Usage: %s <string>...\n", argv[0]); exit(EXIT_FAILURE); } qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp); for (j = 1; j < argc; j++) puts(argv[j]); exit(EXIT_SUCCESS); }
一开始搞不懂return为什么是 * (char * const *) p1 ,后来看注释发现strcmp的原型是:
int strcmp(const char *s1, const char *s2);
strcmp接受
const char *的类型,因此先要把传来的参数p1强制转换成
const char *类型的指针,即
const char **,然后传递给 strcmp 作为引数,写成
* (const char **) p1,与
* (char * const *) p1同义。
但是网上的示例大多数return时并没有写的这样规范,而是写成
*(char*)p1这种形式,编译时会有警告并且会自动去掉一个
*,运行结果会出错。
相关文章推荐
- c语言中参数列表可变的函数写法,如printf
- C语言(Head First C)-8:高级函数:函数指针 qsort() 可变参数函数
- 【C/C++】C语言中qsort的cmp函数写法汇总
- 在C语言中编写支持可变参数的函数
- C语言之数组专题:数组指针、指针数组、数组做函数参数退化、数组名、数组类型
- 不定参数个数函数写法
- C语言可变参数函数
- 2.不定个数参数的函数写法
- C语言可变参数日志函数
- C语言中函数参数不确定的情况
- 《IOS_C语言》高级指针(结构体指针、结构体数组指针、结构体数组指针,作为函数的参数使用、预编译指令)
- C语言中不定参数个数的函数
- C语言中可变参数函数
- C语言可变长参数函数与默认参数提升
- C语言可变长参数函数与默认参数提升
- C语言定义可变参数列表的函数
- C语言_函数可变参数列表
- C语言中可变参数函数的设计
- C/C++ 调用qsort/sort 对字符数组排序的cmp函数写法
- C语言中的可变参数函数的浅析(以Arm 程序中的printf()函数实现为例) .