l i n u x - u s e r s - g r o u p - o f - d a v i s
Next Meeting:
July 7: Social gathering
Next Installfest:
Latest News:
Jun. 14: June LUGOD meeting cancelled
Page last updated:
2010 Apr 22 09:15

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, 2010-04-21 at 19:20 -0700, Matthew Van Gundy wrote:
> On 4/21/10 3:26 PM, Jeff Newmiller wrote:
> >> 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.
> Nope, just reverses it once.  I'll admit, it isn't an idiomatic 
> construction, but it uses an unsigned index that counts down to reverse 
> an array since that's what Brian seemed to be after.

The most idiomatic construction in C for writing an iterator is to use
pointer arithmetic. i.e.

int* thearray;
size_t itssize;

for(int* iterator=thearray; iterator<thearray+itssize;++iterator){
  /* do something with the iterator */

The loop terminates when the address of iterator is one past the end of
the array. The C standard guarantees that you can *form* the address one
past the end of the array (i.e. on a 32-bit machine with 4GB of address
space, the last element of the array can't abut the end of RAM, or some
compiler-level hack is required to guarantee that you can form the
address). However, the C standard makes no guarantees about being able
to form the address *before* the array, so the following is not
guaranteed to work:

for(int* iterator=thearray+itssize-1; iterator>=thearray;--iterator){
  /* do something with the iterator */

The following idiom must be used instead:

int* iterator=thearray+itssize;
while( iterator-- > thearray){
  /* do something with the iterator. */

The asymmetry you're noticing with unsigned int indices is a similar

vox-tech mailing list

LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
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:
EDGE Tech Corp.
For donating some give-aways for our meetings.