[问题] binary search 指标参数问题

楼主: anoymouse (没有暱称)   2017-06-30 10:44:53
Win10
gcc
goo.gl/Q3ybkG
p145,146
大意就是拿一个字串跟结构阵列里面的每个字串成员做比较,找到一样的字串
结构阵列的字串已经是由小到大的排列了
int binsearch(char *word, struct key tab[], int n)
n是阵列大小,在binsearch里面
low = 0;
high = n - 1;
后来又改成一个指标指到结构版本 p148,149
struct key *low = &tab[0];
struct key *high = &tab[n];
请问为什么这边的n就不减一了?
后面写到
The initializers for low and high are now pointers to the beginning and just
past the end of the table(阵列结尾的下一位)
mid = (low+high)/2 /* WRONG */
because the addition of pointers is illegal. Subtraction is legal, however,
so high-low is the number of elements, and thus
mid = low + (high-low)/2
应该只是说指标不能相加,但是可以相减,虽然第二种也可以避免overflow的问题
但还是不懂为什么n不减一
谢谢
作者: Hazukashiine (私は幸せです)   2017-06-30 11:40:00
不管是 n 还是 n-1 结果都一样 只是找中间值附而已近
作者: aiwhat   2017-06-30 12:33:00
n 没减一的后面的 while 有调整成 low < high原本的是 low <= high,做的事情是一样的只差在一个用 [low, high] 表示搜寻范围,另一个用[low, high)表示
楼主: anoymouse (没有暱称)   2017-06-30 13:05:00
所以只是想强调取到阵列范围外下一个元素是合法的?谢谢两位回答!!
作者: Hazukashiine (私は幸せです)   2017-06-30 14:05:00
指向阵列后面一个元素的指标合法 但存取该指标则否
楼主: anoymouse (没有暱称)   2017-06-30 15:59:00
是 书上也有写到 可以reference 不能dereference谢谢!

Links booklink

Contact Us: admin [ a t ] ucptt.com