Output of C Programs | Set 9

Predict the output of the below programs.

Question 1

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output: Compiler dependent
Evaluation order of parameters is not defined by 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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output: Not Same
&arr is an alias for &arr[0] and returns the address of the first element in array, but &p returns the address of pointer p.
Now try below program

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right




Question 3

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output: 0
In C, variables are always statically (or lexically) scoped. Binding of x inside f() to global variable x is defined at compile time and not dependent on who is calling it. Hence, output for the above program will be 0.

On a side note, Perl supports both dynamic ans static scoping. Perl’s keyword “my” defines a statically scoped local variable, while the keyword “local” defines dynamically scoped local variable. So in Perl, similar (see below) program will print 1.

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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


Article Tags :

3


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.