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:
0
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.
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape,
GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out -
check it out now!
Last Updated :
21 Feb, 2022
Like Article
Save Article