c中的csearch()中的cmpfunc

时间:2017-04-04 14:41:51

标签: c function-pointers

我正在学习使用编程书中的函数指针。在那里我发现了bsearch()和qsort()的使用。这两个函数有一个函数指针cmpfunc的参数。

在qsort()中需要cmpfunc来比较两个元素。

我不明白为什么bsearch()中需要cmpfunc以及它是如何工作的。

请帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分:2)

根据this文档,需要.stack 100h .data. text db 'text$' seconds db 99 delay db ? ;HOW MANY SECONDS TO WAIT. .code mov ax, @data mov ds, ax ;INITIALIZE DATA SEGMENT. forever: mov delay, 5 ;DELAY 5 SECONDS. call my_delay ;◄■■ CALL PROCEDURE HERE. ;DISPLAY TEXT EVERY 5 SECONDS. mov ah, 9 mov dx, offset text int 21h jmp forever mov ax, 4c00h int 21h ;FINISH PROGRAM. ;-------------------------------------------------------- ;PROCEDURE TO WAIT "N" SECONDS. ;SECONDS ENTER IN VARIABLE "DELAY". ;VARIABLE "SECONDS" MUST EXIST. USED AS LOCAL COUNTER. my_delay proc delaying: ;GET SYSTEM TIME. mov ah, 2ch int 21h ;RETURN SECONDS IN DH. ;CHECK IF ONE SECOND HAS PASSED. cmp dh, seconds je delaying ;IF NO JUMP, ONE SECOND HAS PASSED. VERY IMPORTANT : PRESERVE ;SECONDS TO USE THEM TO COMPARE WITH NEXT SECONDS. THIS IS HOW ;WE KNOW ONE SECOND HAS PASSED. mov seconds, dh dec delay jnz delaying ;IF DELAY IS NOT ZERO, REPEAT. ret my_delay endp 比较器函数,类似于使用bsearch函数的函数,以评估数组中元素的所需候选者。如果包含所需元素或在每次迭代中丢弃一半搜索空间,则需要终止搜索;角色与qsort函数中的角色相同。

答案 1 :(得分:1)

bsearch中,调用比较函数cmpfunc来判断被检查的元素是否与密钥实际匹配,如果不匹配,则密钥是否在列表中更早或更晚。< / p>