添加指针地址 - 合法性

CS *_*ent 4 c pointers

由于将两个指针放在一起是非法的,这段代码片段有效吗?

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...
Run Code Online (Sandbox Code Playgroud)

while循环中的第一个语句似乎将两个地址加在一起,这是如何合法的?

此代码来自K&Rs的C编程语言(第122页)

Pau*_*l R 6

两个指针()的差异high - low是一个整数(实际上ptrdiff_t,它是有符号整数类型),所以你要向指针添加一个整数,这是完全合法的.这也解释了为什么将差值除以2是完全可以的,这不是你可以用指针做的事情.