x++ results following steps.
1) read the value of x in to register.
2) increment the value of x
3) write the incremented value back to x (which means you are changing the value of x by '1')
But what you are trying to do is (&i)++ which means the following.
1) read address of i into register
2) increment the address by 1
3) write the incremented value in to address again? How you can change the address?
If you want to send the integer which is stored in next address to foo(), you need to increment as below.
int *p = &i + 1;
foo(p);
But that may result in undefined behavior because you know only address of i where i value is stored. Once you increment the address, you will get next address and it may contain some junk value.