c - 添加指针地址 - 合法性

标签 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...

while循环的第一条语句好像是把两个地址加在一起,这怎么合法?

此代码来自 K&Rs the C programming language on page 122

最佳答案

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

关于c - 添加指针地址 - 合法性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327018/

相关文章:

c++ - #include <文件名> 和 #include "filename"之间有什么区别?

c - 如何从用户程序中调用用内核模块编写的函数?

c - 如何修复 C 中的坏指针

c++ - 错误: expression must be a pointer to a complete object type (?)

pointers - 使用 xlsx 包 panic : runtime error: invalid memory address or nil pointer dereference Go

c - 为什么 Helgrind 显示 "lock order violated"错误消息?

c - 缓冲区溢出问题

将此 C 代码转换为 Delphi 代码

c++ - 为什么我需要转换算法 remove() 的参数?

C++ 删除 base 或 dynamic_cast 指针?