edited by
10,005 views
37 votes
37 votes

Consider the following C program:

#include <stdio.h>
typedef struct {
    char *a;
    char *b;
    } t;
void f1 (t s);
void f2 (t *p);
main()
{
    static t s = {"A", "B"};
    printf ("%s %s\n", s.a, s.b);
    f1(s);
    printf ("%s %s\n", s.a, s.b);
    f2(&s);
}
void f1 (t s)
{
    s.a = "U";
    s.b = "V";
    printf ("%s %s\n", s.a, s.b);
    return;
}
void f2(t *p)
{
    p -> a  = "V";
    p -> b = "W";
    printf("%s %s\n", p -> a, p -> b);
    return;
}

What is the output generated by the program ?

  1. $A \ B$
    $U \ V$
    $V \ W$
    $V \ W$
  2. $A \ B$
    $U \ V$
    $A \ B$
    $V \ W$
  3. $A \ B$
    $U \ V$
    $U \ V$
    $V \ W$
  4. $A \ B$
    $U \ V$
    $V \ W$
    $U \ V$
edited by

2 Answers

Best answer
40 votes
40 votes

First print $\text{A  B}$

$\textsf{f1}$ is call by value the changes applicable only for local

from $\textsf{f1},  \text{U V}$ is printed

back in main $\text{A B}$ is printed

then in $\textsf{f2}, \text{V W}$ is printed

Hence, answer is (B).

edited by
Answer:

Related questions