The Increment operator requires lvalue is an expression referring to an object.
We know that,
int a = 10; // a is lvalue expression and 10 is rvalue which is usually a constant.
int *p = &a; // Note that An lvalue can also be an rvalue or can be used in rvalue, but an rvalue can never be an lvalue.
From the above statement &lvalue is a rvalue.
&i ++ = (rvalue)++, but increment operator requires lvalue as its operand. Hence compiler error.
Error can be resolved as ,
int i = 10;
int *p = &i;
foo(p++);