假设p
是一个整数指针并且i
是一个整数:
*p++
给出对应于的整数值p
。
i++
给出一个加 1的整数值
由于通过行为,上述两者都产生整数, ++*p++
并且++i++
不应该报告相同的错误?但是为什么++*p++
在 ++i++
给出编译器错误时起作用?
int main()
{
int a[10] = {0};
int *p = (int*)&a;
int i = 0;
// printf("%d", ++i++); -- FAILS error: lvalue required as increment operand
printf("%d\n", ++*p++ ); // Prints 1
return 0;
}
编辑
++i++分解如下:
i++
++(result)
这正是我感到困惑的地方:以同样的方式我们可以将 ++*p++ 分解为
*p++
++(result).
*p++ 返回一个值 (rvalue) ,而不是指针。那么为什么会有区别呢?