В главе 6 из K & R мы переходим к обращению к элементам структуры указателями. Нам дана функция:Управление указателем K & R
struct key *binsearch(char *word, struct key *tab, int n)
{
int cond;
struct key *low = &tab[0];
struct key *high = &tab[n];
struct key *mid;
while (low < high) {
mid = low + (high-low)/2;
if ((cond = strcmp(word, mid->word)) < 0)
high = mid;
else if (cond > 0)
low = mid + 1;
else
return mid;
}
return NULL;
}
В более ранней версии этой программы, в которой мы не использовали указатели, мы могли бы вычислить mid
как mid = (low+high)/2
но теперь нам нужно вычислить mid
, как mid = low + (high-low)/2
Я понимаю, что вы не можете добавлять указатели, потому что логически результат не возвращает ничего полезного, но то, что я не понимаю, - это мы не добавляем указатели с mid = low + (high-low)/2
? Мы добавляем low
к результату (high-low)/2
?
[Read this] (http://stackoverflow.com/questions/394767/pointer-arithmetic?rq=1). – WhozCraig