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