假设
这正是我困惑的地方: 同样地,我们可以将++*p++分解为
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),而不是指针。那么为什么会有这种区别呢?
int *p = (int*)&a;
是错误的。当编译器告诉你指针类型错误时,不要随意使用强制类型转换来消除警告/错误。相反,找出问题所在并进行修正。应该改为int *p = a;
。 - R.. GitHub STOP HELPING ICE