The Gateway to Computer Science Excellence
First time here? Checkout the FAQ!
x
+15 votes
1.9k views

Consider the C program shown below:

#include<stdio.h>
#define print(x) printf("%d", x)

int x;
void Q(int z)
{
        z+=x;
        print(z);
}

void P(int *y)
{
        int x = *y + 2;
        Q(x);
        *y = x - 1;
        print(x);
}
main(void) {
        x = 5;
        P(&x);
        print(x);
}

The output of this program is

  1. $12 \ 7 \ 6$
  2. $22 \ 12 \ 11$
  3. $14 \ 6 \ 6$
  4. $7 \ 6 \ 6$
asked in Programming by Veteran (69k points)
edited by | 1.9k views

3 Answers

+26 votes
Best answer
main: x = 5; //Global x becomes 5

 

P: int x = *y + 2; //local x in P becomes 5+2 = 7

 

Q: z+=x; //local z in Q becomes 7 + 5 = 12
Q: print(z); //prints 12

 

P:  *y  = x - 1; //content of address of local variable y (same as global variable x) becomes 7 - 1 = 6

 

P: print(x); //prints local variable x in P = 7

 

main: print(x); //prints the global variable x = 6
answered by Veteran (346k points)
edited by
@Arjun sir how do we know dyanamic scoping here is not used here in that case answer will differ and it will be C
C program has only static scoping.
Here y is pointing to value at main() function or global variable too. So only change in y is reflected in main().
Here actual ans should be 12,6,6

Why not local x change with value of *y change?

Any reference?
@srestha

Local X inside P only has scope till there, and you are printing that which has value $7$.

And, the Y inside P() is related to global X not local X .
oh thanks @Kapil
+4 votes
The answer for this is A).. Can get the answer by a simple dry run..
answered by Junior (565 points)
@Arjun sir it means initializing the global varibles inside the main function or initializing it globally out of all functions both are same?
How can we initialize a global variable inside main? :O
As in the above program int x is initialized inside the main which is acting as the gloabl value of x?
Nopes. Initialization means assigning initial value when memory is created. That happens before main starts execution. In C, if a value is not given, all global/static variables are initialized to 0. So, in the given question x is initialized to 0 and in main the value gets changed to 5.
thank you @Arjun sir you made me clear now. :)
+2 votes
void P(int *y)
{
        int x = *y + 2; // x=5+2=7
        Q(x); // Q(7)
        void Q(int z) // z=7 
           { 
               z+=x; // z=z+x=7+5=12 as here x is global and its value is 5 define in main() section print(z); // 12 is printed 
           } 
        *y = x - 1; // 7-1=6
        print(x);  // here value of x is 7 as it is local so 7 is printed   
}                     
 print(x); // here value of y is printed i.e 6 as it represents the final value of global x

 

so output is 12 7 6

 

                    
 
answered by Boss (7.8k points)
Answer:

Related questions



Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true

33,646 questions
40,193 answers
114,176 comments
38,663 users