Search code examples
cswap

Swapping variables with a function doesn't affect the call site


A few lessons ago I learned about variables, and got a question in my homework about swapping two numbers - I used a third variable to solve this question.

The solution looked somewhat like this:

#include <stdio.h>

int main(void) {
    int x, y;
    scanf("%d %d", &x, &y);

    // swappring the values

    int temp = x;
    x = y;
    y = temp;

    printf("X is now %d and Y is now %d", x, y);
}

Now I'm learning about functions, and I wanted to try and solve the previous question with a helper swap function.

This is the code I've written:

#include <stdio.h>

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

int main(void) {
    int a = 3, b = 4;
    swap(a, b);

    printf("%d %d\n", a, b);
}

I don't know why, but the output is still 3 4 even though I changed the value inside the swap() function.

Why is this happening?


Solution

  • Pass address of x and y as arguments to function. Right now they are local variables, changes are not made to original variables .

    Do as follows-

    void swap(int *x,int *y){
     /*            dereference pointers and  swap    */
     int temp = *x;
     *x = *y;
     *y = temp;
    }
    

    And call in main like this -

    swap(&x,&y);