既然将两个指针相加是非法的,那么这段代码如何有效?
struct key *low = &tab[0];
struct key *high = &tab[n];
struct key *mid;
while (low < high)
{
mid = low + (high-low) / 2; //isn't this adding pointers?
//code continues...
while循环的第一条语句好像是把两个地址加在一起,这怎么合法?
此代码来自 K&Rs the C programming language on page 122
最佳答案
两个指针(high - low
)的差是一个整数(实际上是ptrdiff_t
,它是有符号整数类型),因此您要将 整数 添加到指针,这是完全合法的。这也解释了为什么将差异除以 2 是完全可以的,这不是你可以用指针做的事情。
关于c - 添加指针地址 - 合法性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327018/