我正在学习使用编程书中的函数指针。在那里我发现了bsearch()和qsort()的使用。这两个函数有一个函数指针cmpfunc的参数。
在qsort()中需要cmpfunc来比较两个元素。
我不明白为什么bsearch()中需要cmpfunc以及它是如何工作的。
请帮帮我。提前谢谢。
答案 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>