Josh Curren
Josh Curren

Reputation: 10226

Using pointers to swap int array values

I am supposed to use pointers to swap ints in an array. It compiles with no errors or warnings and runs but does not swap the ints. Any suggestions would be helpful!!!

Here is the tester:

#import <stdio.h>

void swap( int ary[] );

int main(  int argc, char*argv[] )
{
    int ary[] = { 25, 50 };
    printf( "The array values are: %i and %i \n", ary[0], ary[1] );
    swap( ary );
    printf( "After swaping the values are: %i and %i \n", ary[0], ary[1] );

    return 0;
}

Here is the swap function:

void swap( int ary[] )
{
    int temp = *ary;
    *ary = *(ary + 1);
    *ary = temp;
}

This is what is displayed after running:

The array values are: 25 and 50
After swaping the values are: 25 and 50

Upvotes: 6

Views: 60034

Answers (7)

user167864
user167864

Reputation:

You can also swap the values without any temporary variable:

void swap(int *x, int *y)
{
   *x ^= *y;
   *y ^= *x;
   *x ^= *y;
}

then call:

swap(&ary[0], &ary[1]);

Upvotes: 2

John La Rooy
John La Rooy

Reputation: 304137

just for fun; It's also possible to swap without using a temporary value

void swap( int ary[] )
{
    *ary ^= *(ary + 1);
    *(ary + 1) ^= *ary;
    *ary ^= *(ary + 1);
}

As GMan points out, this code obscures your intent from the compiler and the processor, so the performance may be worse than using a temp variable, especially on a modern CPU.

Upvotes: 4

f0b0s
f0b0s

Reputation: 3097

your swap function will work only for 2-ints array, so show it to your compiler (it won't change anything, but make code cleaner)

void swap( int ary[2] )

Upvotes: 0

Peter Rowell
Peter Rowell

Reputation: 17713

Try this instead:

void swap( int ary[] )
{
    int temp = ary[0];
    ary[0] = ary[1];
    ary[1] = temp;
}

Upvotes: 0

theycallmemorty
theycallmemorty

Reputation: 12962

You move the second value into the first spot, and then move the first value back into the first spot.

Upvotes: 4

Ron Warholic
Ron Warholic

Reputation: 10074

I hate spoiling this but it looks like a typo more than anything.

In your swap function:

*ary = temp;

should be:

*(ary + 1) = temp;

edit: Is there a reason you're not using array notation? I think it's a bit clearer for things like this:

int temp = ary[0];
ary[0] = ary[1];
ary[1] = temp;

Upvotes: 21

CB Bailey
CB Bailey

Reputation: 791621

Examine your swap function more carefully:

void swap( int ary[] )
{
    int temp = *ary;
    *ary = *(ary + 1);
    *ary = temp;
}

When does *(ary + 1) get assigned to?

Upvotes: 6

Related Questions