On Wed, 21 Apr 2010, Matthew Van Gundy wrote: > On 4/21/10 1:05 PM, Brian Lavender wrote: >> Well, it seems to me that to reverse a array in C, you are going to have >> to use a counter and decrement it. And, since C uses zero indexed >> arrays, it certainly seems to leave me in a quandry whether to use >> signed or unsigned. We know that an array index should always be zero or >> greater. Yet, if we use a simple for loop, one has to test for an exit >> condition. So, what's the solution??? Is it just make the index value >> "i" signed? > > There are many ways to skin a cat, here's one: > > void reverse(int forward[], int backward[], unsigned int n) { > unsigned i = n; > while(i-- > 0) { > backward[n-i-1] = forward[i]; > } > }
This reverses and then re-reverses it. Two comments: a) I believe Standard C calls for the use of "int" as the index of arrays, and leaves it to the compiler to determine whether that should be "signed int" or "unsigned int". I am not familiar with any compilers that use "unsigned int" when "int" is specified (and I suspect it would break a lot of code). This means that when you use an unsigned int there is a conversion to int before the index is used. If the value of your unsigned int is greater than MAX_INT, then your results are undefined according to Standard C, so you should go with the flow and use "int" for indexing arrays. b) In C, conventional indexed for loops do not stop until the index has exited the range of index values that you intend to use in the loop. That means there has to be at least one valid index value that falls outside your range of interest (as you have discovered for this specific type of index counter). If you wish to construct a loop that does not exhibit this behavior, you can use a do{}while() loop that ends on the last value used. --------------------------------------------------------------------------- Jeff Newmiller The ..... ..... Go Live... DCN:<jdnew...@dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/Batteries O.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...2k --------------------------------------------------------------------------- _______________________________________________ vox-tech mailing list vox-tech@lists.lugod.org http://lists.lugod.org/mailman/listinfo/vox-tech