l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
April 21: Google Glass
Next Installfest:
TBD
Latest News:
Mar. 18: Google Glass at LUGOD's April meeting
Page last updated:
2010 Apr 21 19:20

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] loop never exits!
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] loop never exits!



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:<jdnewmil@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



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
O'Reilly and Associates
For numerous book donations.