我正在使用 qsort 库函数对结构元素数组进行排序,在互联网上搜索时我发现了一个资源:信息:使用 C qsort() 函数对结构进行排序@support.microsoft。
我知道 qsort 函数需要通过通用指针进行类型转换。
但是我无法得到这一行:
typedef int (*compfn) (const void*, const void*);
已声明的内容及其后续调用:
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
);
- How is
typedef
行为,我的意思是我们到底输入了什么int (*compfn)
or int (compfn)
?
- 如果是前者,那么电话不应该是
(*compfn)
?
Syntax:
typedef int (*compfn) (const void*, const void*);
^ ^ ^ ^ ^
| return type | arguments type
| new type name
defining new type
compfn
是一个新用户定义的type
被定义为typedef
关键词,
所以,你已经完全定义了类型int (*)(const void*, const void*);
to comfn
使用我上面描述的语法。
声明:
compfn fun; // same as: int (*fun) (const void*, const void*);
means fun
是一个函数指针,它带有两个参数const void*
类型和返回值int
.
假设你有一个类似的函数:
int xyz (const void*, const void*);
那么你可以分配xyz
写给fun
.
fun = &xyz;
打电话时qsort()
:
在表达中(compfn)compare
,你正在对一个函数进行类型转换compare
to (compfn)
类型函数。
A doubt:
电话不应该是(*compfn)
.
不,它的类型名称不是函数名称。
Note: 如果你只是写int (*compfn) (const void*, const void*);
那么没有 typedefcomfn
将是一个指向返回的函数的指针int
并采用两个类型的参数const void*
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)