添加指针的C行为

时间:2012-05-26 09:12:26

标签: c arrays pointers

假设:

int a[N];
int *p; 

为什么a-p工作a+p没有错误:“二进制+的操作数无效。”

2 个答案:

答案 0 :(得分:7)

两个指针之间的差异是有意义的,即它是两个指针之间的元素数量(假设它们都位于同一个数组中)。

添加两个指针是没有意义的(你会如何解释它?)。

答案 1 :(得分:1)

因为减法是有意义的,所以它是两个指针之间的距离。添加指针毫无意义。

当与减法运算符一起使用时,你的数组衰减为int*,并且假设两个指针是相同类型的(1),(2)指向同一数组中的元素,(b)指针T *b大于指针T *a,则标准会保证b - a的结果为Ta之间的b元素的数量。

但是,在您的情况下,指针不指向同一个数组,因此a - p的结果未定义(即使它编译)。

(请注意,标准更具体地说明了何时以及如何减去两个指针,但这主要是它。)