假设:
int a[N];
int *p;
为什么a-p
工作a+p
没有错误:“二进制+的操作数无效。”
答案 0 :(得分:7)
两个指针之间的差异是有意义的,即它是两个指针之间的元素数量(假设它们都位于同一个数组中)。
添加两个指针是没有意义的(你会如何解释它?)。
答案 1 :(得分:1)
因为减法是有意义的,所以它是两个指针之间的距离。添加指针毫无意义。
当与减法运算符一起使用时,你的数组衰减为int*
,并且假设两个指针是相同类型的(1),(2)指向同一数组中的元素,(b)指针T *b
大于指针T *a
,则标准会保证b - a
的结果为T
和a
之间的b
元素的数量。
但是,在您的情况下,指针不指向同一个数组,因此a - p
的结果未定义(即使它编译)。
(请注意,标准更具体地说明了何时以及如何减去两个指针,但这主要是它。)