-1
*a=10
*b=20

How to swap them without using the third variable? Output should be like

*a=20
*b=10
Hong Ooi
  • 56,353
  • 13
  • 134
  • 187
Niharika
  • 1
  • 1
  • 3

2 Answers2

0

Not sure if the interviewer was looking for XOR over something else but it seems you can simply use +, -, and x. Should work if a is bigger or negative as well.

*a+=*b
*b-=*a
*b=*b x -1
*a-=*b

In your example that would give us:

*a+=*b --> *a = 30
*b-=*a --> *b = -10
*b=*b x -1 --> *b = 10
*a-=*b --> *a = 20
valegians
  • 850
  • 1
  • 7
  • 17
0

Here is a simple code to do so:

#include <stdio.h>
#include <stdlib.h>

void usingXOR(int** x, int** y){

unsigned long long a = (unsigned long long)*x;
unsigned long long b = (unsigned long long)*y;

a = a^b;
b = a^b;
a = a^b;

*x = (int*)a;
*y = (int*)b;
}

void main(){

int x=5;
int y=10;

int* a = &x;
int* b = &y;

//If you only want to swap the values the pointers are pointing to
//Here the addresses the pointers are holding dont get swapped
(*a) = (*a)+(*b);
(*b) = (*a)-(*b);
(*a) = (*a)-(*b);

//If you want to swap addresses in the pointers
//printf("Before swap address a: %p\n", a);
//printf("Before swap address b: %p\n", b);

//usingXOR(&a,&b);

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

//printf("After swap address a: %p\n", a);
//printf("After swap address b: %p\n", b);
}
Old Markus
  • 836
  • 7
  • 12