Skip to content
Related Articles
Open in App
Not now

Related Articles

GATE | GATE CS 2018 | Question 52

Improve Article
Save Article
  • Difficulty Level : Medium
  • Last Updated : 09 Mar, 2018
Improve Article
Save Article

Consider the following C program:

#include <stdio.h>
void fun1(char *s1, char *s2) {
  char *temp;
  temp = s1;
  s1 = s2;
  s2 = temp;
void fun2(char **s1, char **s2) {
  char *temp;
  temp = *s1;
  *s1 = *s2;
  *s2 = temp;
int main() {
  char *str1 = "Hi", *str2 = "Bye";
  fun1(str1, str2);
  printf("%s %s", str1, str2);
  fun2(&str1, &str2);
  printf("%s %s", str1, str2);
  return 0;

The output of the program above is

(A) Hi Bye Bye Hi
(B) Hi Bye Hi Bye
(C) Bye Hi Hi Bye
(D) Bye Hi Bye Hi

Answer: (A)

Explanation: fun1(char *s1, char *s2)
Above function scope is local, so the value changed here won’t affect actual parameters. SO the values will be ‘Hi Bye’.
fun2(char **s1, char **s2)
In this function value is pointer to pointer, so it changes pointer of the actual value. So values will be ‘Bye Hi’

Answer is ‘Hi Bye Bye Hi’

Option (A) is correct.

Quiz of this Question

My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!