There are two operators defined for incrementation - pre- and post-increment - and they both return a value! It is as if you called a function:
printf("%d", *f(q));
The preincrement operator first increments and returns the new value, the postincrement operator returns the value and increments afterwards.
OK, this is for illustration only - technically, it cannot increment after returning, of course, so it remembers the initial value, increments and returns the remembered one afterwards. This is, btw., the reason why preincrement is more efficient than postincrement, unless the compiler optimizes the differences away...