Note : All the
programs are tested under Turbo C/C++ compilers.
1. #define square(x) x*x
It is assumed that,
_ Programs run under
DOS environment,
_ The underlying
machine is an x86 system,
_ Program is compiled
using Turbo C/C++ compiler.
The program output may
depend on the information based on this
assumptions (for
example sizeof(int) == 2 may be assumed).
1. #define square(x) x*x
main()
{
int
i;
i =
64/square(4);
printf("%d",i);
}
Answer:
64
Explanation:
the macro call square(4)
will substituted by 4*4 so the expression
becomes
i = 64/4*4 . Since / and * has equal priority the expression will be
evaluated
as (64/4)*4 i.e. 16*4 = 64
2. main()
{
char
*p="hai friends",*p1;
p1=p;
while(*p!='\0')
++*p++;
printf("%s
%s",p,p1);
}
Answer:
ibj!gsjfoet
Explanation:
++*p++ will be parse in the
given order
_ *p that is value at the
location currently pointed by p will be taken
_ ++*p the retrieved value
will be incremented
_ when ; is encountered the location will be
incremented that is p++ will be executed
Hence, in the while loop initial value
pointed by p is ‘h’, which is changed to ‘i’ by executing ++*p and pointer
moves to point, ‘a’ which is similarly changed to ‘b’ and so on. Similarly
blank space is converted to ‘!’. Thus, we obtain value in p becomes “ibj!gsjfoet”
and since p reaches ‘\0’ and p1 points to p thus p1doesnot print nything.
3. #include <stdio.h>
#define
a 10
main()
{
#define
a 50
printf("%d",a);
}
Answer:
50
Explanation:
The preprocessor directives
can be redefined anywhere in the
program. So the most
recently assigned value will be taken.
4. #define clrscr() 100
main()
{
clrscr();
printf("%d\n",clrscr());
}
Answer:
100
Explanation:
Preprocessor executes as a
seperate pass before the execution of
the compiler. So textual replacement of
clrscr() to 100 occurs.The input program to compiler looks like this :
main()
{
100;
printf("%d\n",100);
}
Note:
100;
is an executable statement but with no action. So it doesn't
give
any problem
5. main()
{
41printf("%p",main);
}
Answer:
Some address will be
printed.
Explanation:
Function names are just
addresses (just like array names are
addresses).
main() is also a function. So the address of
function main will be printed. %p in printf specifies that the argument is an
address. They are printed as hexadecimal numbers.
7) main()
{
clrscr();
}
clrscr();
Answer:
No output/error
Explanation:
The first clrscr() occurs
inside a function. So it becomes a function
call.
In the second clrscr(); is a function declaration (because it is
not
inside any function).
8) enum colors {BLACK,BLUE,GREEN}
main()
{
printf("%d..%d..%d",BLACK,BLUE,GREEN);
return(1);
}
Answer:
0..1..2
Explanation:
enum assigns numbers
starting from 0, if not explicitly defined.
9) void main()
{
char
far *farther,*farthest;
printf("%d..%d",sizeof(farther),sizeof(farthest));
}
Answer:
4..2
Explanation:
the second pointer is of
char type and not a far pointer
10. main()
{
int
i=400,j=300;
printf("%d..%d");
}
Answer:
400..300
Explanation:
printf takes the values of
the first two assignments of the program.
Any
number of printf's may be given. All of them take only the first
two
values. If more number of assignments given in the
program,then
printf will take garbage values.
11. #include<stdio.h>
main()
{
int
a[2][2][2] = { {10,2,3,4}, {5,6,7,8} };
int
*p,*q;
p=&a[2][2][2];
*q=***a;
printf("%d----%d",*p,*q);
}
Answer:
SomeGarbageValue---1
Explanation:
p=&a[2][2][2] you
declare only two 2D arrays, but you are trying
to access the third 2D(which you are not
declared) it will print garbage values.
*q=***a starting address of
a is assigned integer pointer. Now q is pointing to starting address of a. If
you print *q, it will print first element of 3D array.
12. #include<stdio.h>
main()
{
struct
xx
{
int
x=3;
char
name[]="hello";
};
struct
xx *s;
printf("%d",s->x);
printf("%s",s->name);
}
Answer:
Compiler Error
Explanation:
You should not initialize
variables in declaration
13. #include<stdio.h>
main()
{
struct
xx
{
int
x;
struct
yy
{
char
s;
struct
xx *p;
};
struct
yy *q;
};
}
Answer:
Compiler Error
Explanation:
The structure yy is nested
within structure xx. Hence, the elements
are of yy are to be accessed through the
instance of structure xx, which needs an instance of yy to be known. If the
instance is created after defining the structure the compiler will not know
about the instance relative to xx. Hence for nested structure yy you have to
declare member.
14. main()
{
printf("\nab");
printf("\bsi");
printf("\rha");
}
Answer:
7
hai
Explanation:
\n - newline
\b - backspace
\r - linefeed
15. main()
{
int
i=5;
printf("%d%d%d%d%d%d",i++,i--,++i,--i,i);
}
Answer:
45545
Explanation:
The arguments in a function
call are pushed into the stack from left
to right. The evaluation is by popping out
from the stack. and the evaluation is from right to left, hence the result.
Last Updated Date: March 22, 2012
If you have any queries post it in Comments..