The reader of that code doesn't have any reason to assume that i has any value other than zero, unless they know about the implementation of inc. But, you say, they should be able to read my excellent function names, and understand that “inc” is short for “increment”. But consider the next person to read this code: they have a lot on their mind, a lot to understand, and they're probably looking for a bug, so may be extra suspicious of your lovely code.

So do this: even for this innocuous incrementer, declare it so:

void inc(int* i)
{
++*i;
}

and then when the read the code at the call site, a big ugly ampersand tells them someone may have messed with their i:

int i = 0;
foo(i,i+1);
bar(i);
inc(&i);
baz(i);

But...

If your function is more complex than inc, and you believe the code is more readable with the reference, just capture the argument locally. And don't be such a baby.