21.
#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
22.
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
anything.
23.
#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.
24.
#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
25.
main()
{
printf("%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.
No comments:
Post a Comment