Dre*_*f D 2 c pointers typedef function-pointers qsort
我正在使用qsort库函数对结构元素数组进行排序,而在Internet上搜索时我找到了一个资源:INFO:使用C qsort()函数 @support.microsoft 对结构进行排序.
我知道qsort函数需要通用指针进行类型转换.
但是我无法得到这一行:
typedef int (*compfn) (const void*, const void*);
Run Code Online (Sandbox Code Playgroud)
已宣布的内容及其随后的致电:
qsort((void *) &array, // Beginning address of array
10, // Number of elements in array
sizeof(struct animal), // Size of each element
(compfn)compare // Pointer to compare function
);
Run Code Online (Sandbox Code Playgroud)
typedef表现,我的意思是到底有没有我们typedeffed int (*compfn)或int (compfn)? (*compfn)吗? 句法:
typedef int (*compfn) (const void*, const void*);
^ ^ ^ ^ ^
| return type | arguments type
| new type name
defining new type
Run Code Online (Sandbox Code Playgroud)
compfn是type由typedef关键字定义的新用户定义,
所以,你究竟typedefded int (*)(const void*, const void*);来comfn使用我上述的语法.
声明:
compfn fun; // same as: int (*fun) (const void*, const void*);
Run Code Online (Sandbox Code Playgroud)
means fun是一个函数指针,它接受两个const void*类型和返回的参数int.
假设你有一个像这样的函数:
int xyz (const void*, const void*);
Run Code Online (Sandbox Code Playgroud)
然后你可以分配xyz地址fun.
fun = &xyz;
Run Code Online (Sandbox Code Playgroud)
致电qsort():
在表达式中(compfn)compare,您要对类型函数compare进行(compfn)类型转换.
一个疑问:
不应该打电话
(*compfn).
不,它的类型名称不是函数名称.
注意:如果你只是在int (*compfn) (const void*, const void*);没有typedef的情况下编写,那么comfn它将是一个指向函数的指针,该函数返回int并获取两个类型的参数const void*