Of course, the same thing can be done with a for loop, and use one less line of code. I like to look at for as the Swiss Army Loop.

for(i=length; i--;) 
or, if you only need to execute one statement:
for(i=length; i; f(i--)) ;
The idea itself has been widely used in the past. If you remeber that i-- is the same as i,i=i-1 (ignoring the possible use of a processor pos-decrement instruction) It's very similar to the way copying of strings in C, which goes back at least to UNIX, 6th edition (care of the Lions book, 1977) has used this idea:
// This one's from K&R, 2nd ed, p.106
// remember, C strings are null terminated arrays of characters
void strcpy(char *s, char *t)
{
   while(*s++ = *t++)
      ;
}

(say, is the x86 actually able to make use of pre/post-inc/decrements, or is that just a leftover from the PDP-11 days?)