main()
{
void
swap();
int x=10,y=8;
swap(&x,&y);
printf("x=%d y=%d",x,y);
}
void swap(int *a, int *b)
{
*a ^= *b,
*b ^= *a, *a ^= *b;
}
Answer:
x=10 y=8
Explanation:
Using ^ like this is a way
to swap two variables without using a temporary variable and that too in a
single statement.
Inside main(), void swap();
means that swap is a function that may take any number of arguments (not no
arguments) and returns nothing. So this doesn’t issue a compiler error by the
call swap(&x,&y); that has two arguments.
This convention is
historically due to pre-ANSI style (referred to as Kernighan and Ritchie style)
style of function declaration. In that style, the swap function will be defined
as follows,
void swap()
int *a, int *b
{
*a ^= *b,
*b ^= *a, *a ^= *b;
}
where the arguments follow
the (). So naturally the declaration for swap will look like, void swap() which
means the swap can take any number of arguments.