All mock tests are FREE till 31 December — register to save your progress

What is the output of the following program?
#include<stdio.h>
void f1(char *x, char *y) {
  char *t1;
  t1 = x; x = y; y = t1;
}
void f2(char **x, char **y) {
  char *t1;
  t1 = *x; *x = *y; *y = t1;
}
int main() {
  char *a = "ONE", *b = "TWO";
  f1(a, b);
  printf("%s %s ", a, b);
  f2(&a, &b);
  printf("%s %s", a, b);
  return 0;
}

Pick an option to check yourself, or open the answer below.

Show answer & explanation

Correct answer: A. ONE TWO TWO ONE

Explanation

f1 swaps only its local copies of the pointers, so a and b are unchanged: 'ONE TWO'. f2 receives the addresses of a and b and really swaps them: 'TWO ONE'.

More Programming Languages and Computer Graphics questions