Skip to content
Related Articles

Related Articles

Output of C Programs | Set 9

View Discussion
Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 21 Feb, 2022

Predict the output of the below programs. 
Question 1 
 

c




int main()
{
 int c=5;
 printf("%d\n%d\n%d", c, c <<= 2, c >>= 2);
 getchar();
}


Output:

 Compiler dependent 

The evaluation order of parameters is not defined by the C standard and is dependent on compiler implementation. It is never safe to depend on the order of parameter evaluation. For example, a function call like above may very well behave differently from one compiler to another.

References: 
http://gcc.gnu.org/onlinedocs/gcc/Non_002dbugs.html

Question 2 

c




int main()
{
    char arr[] = {1, 2, 3};
    char *p = arr;
    if(&p == (char*) &arr)
     printf("Same");
    else
     printf("Not same");
    getchar();
}   


Output: 

Not Same 

&arr is an alias for &arr[0] and returns the address of the first element in the array, but &p returns the address of pointer p. 

Now try the below program 
 

c




int main()
{
    char arr[] = {1, 2, 3};
    char *p = arr;
    if(p == (char*) &arr)
     printf("Same");
    else
     printf("Not same");
    getchar();
}   


Question 3

c




int main()
{
    char arr[] = {1, 2, 3};
    char *p = arr;
    printf(" %d ", sizeof(p));
    printf(" %d ", sizeof(arr));
    getchar();
}   


Output: 

4 3 

sizeof(arr) returns the amount of memory used by all elements in array 
and sizeof(p) returns the amount of memory used by the pointer variable itself.

Question 4 

c




int x = 0;
int f()
{
   return x;
}
 
int g()
{
   int x = 1;
   return f();
}
 
int main()
{
  printf("%d", g());
  printf("\n");
  getchar();


Output:

In C, variables are always statically (or lexically) scoped. The binding of x inside f() to global variable x is defined at compile time and not dependent on who is calling it. Hence, the output for the above program will be 0.
On a side note, Perl supports both dynamic and static scoping. Perl’s keyword “my” defines a statically scoped local variable, while the keyword “local” defines a dynamically scoped local variable. So in Perl, a similar (see below) program will print 1. 
 

perl




$x = 0;
sub f
{
   return $x;
}
sub g
{
   local $x = 1; return f();
}
print g()."\n";


Reference: 
http://en.wikipedia.org/wiki/Scope_%28programming%29
Please write comments if you find any of the above answers/explanations incorrect.
 


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!