Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Swapping 2 void pointers addresses

I need to create a swap function that takes 2 addresses as input and swaps them regardless what type they point to. Here’s my swap function:

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

When I use it with integers it works fine and swaps them properly, but using strings the addresses seems to swap inside the function but when I try to call them from outside the function I notice they didn’t change at all.

Here’s my full code and the resulting output.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

  printf("before %s %s\n",(char*)array[i],(char*)array[j] );
  swap(array[i], array[j]);
  printf("after %s %s\n",(char*)array[i],(char*)array[j] );

I casted everything to string to understand what was wrong with them

void swap(void* x,void* y){
  printf("  after IN %s %s\n",(char*)x,(char*)y );
  void* temp=x;
  x=y;
  y=temp;
  printf("  after IN %s %s\n",(char*)x,(char*)y );
}

OUTPUT

before fannullone falafel
  after IN fannullone falafel
  after IN falafel fannullone
after fannullone falafel

>Solution :

To swap two objects in a function you need to pass them to the function by reference.

In C passing by reference means passing objects indirectly through pointers to them. So dereferencing the pointers the function gets a direct access to the original objects and can change them.

So for objects of the type void * the function parameters will have the type void **. The function will look like

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

Here is a demonstration program.

#include <stdio.h>

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

int main( void ) 
{
    void *s1 = "Hello";
    void *s2 = "World";

    printf( "s1 = %s, s2 = %s\n", ( char * )s1, ( char * )s2 );

    swap( &s1, &s2 );

    printf( "s1 = %s, s2 = %s\n", ( char * )s1, ( char * )s2 );
}

The program output is

s1 = Hello, s2 = World
s1 = World, s2 = Hello
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading