- main(){
char string[]="Hello World";
display(string);
}
void display(char *string){
printf("%s",string);
}
Answer:
Compiler Error : Type
mismatch in redeclaration of function display
Explanation :
In third line, when the
function display is encountered, the compiler doesn't know anything about the
function display. It assumes the arguments and return types to be integers,
(which is the default type). When it sees the actual function display, the
arguments and type contradicts with what it has assumed previously. Hence a compile
time error occurs.
- main(){
int c=- -2;
printf("c=%d",c);
}
Answer:
c=2;
Explanation:
Here unary minus (or
negation) operator is used twice. Same maths
rules applies, ie. minus * minus= plus.
Note:
However you cannot give like
--2. Because -- operator can only be
applied to variables as a decrement operator (eg., i--). 2 is a constant and
not a variable.
- #define int char
main(){
int i=65;
printf("sizeof(i)=%d",sizeof(i));
}
Answer:
sizeof(i)=1
Explanation:
Since the #define replaces
the string int by the macro char
- main(){
int i=10;
i=!i>14;
printf("i=%d",i);
}
Answer:
i=0
Explanation:
In the expression !i>14,
NOT (!) operator has more precedence than ‘ >’ symbol. ! is a unary logical
operator. !i (!10) is 0 (not of true is false).
0>14 is false (zero).
- main(){
char
s[]={'a','b','c','\n','c','\0'};
char *p,*str,*str1;
p=&s[3];
str=p;
str1=s;
printf("%d",++*p +
++*str1-32);
}
Answer:
77
Explanation:
p is pointing to character
'\n'. str1 is pointing to character 'a' ++*p. "p is pointing to '\n' and
that is incremented by one." the ASCII value of '\n' is 10, which is then
incremented to 11. The value of ++*p is 11. ++*str1, str1 is pointing to 'a'
that is incremented by 1 and it becomes 'b'. ASCII value of 'b' is 98.
Now performing (11 + 98 – 32), we get 77 (77
is the ASCII value for "M");
So we get the output 77.
- main(){
int a[2][2][2] = {
{1,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.
- main(){
struct xx{
char
name[]="hello";
};
struct xx *s;
printf("%s",s->name);
}
Answer:
Compiler Error
Explanation:
You should not initialize
variables in structure declaration.
- main(){
struct xx{
int x;
struct yy{
char s;
struct xx *p;
};
struct yy *q;
};
}
Answer:
No output.
Explanation:
Pointer to the same type of
structures are known as self referential structures. They are particularly used
in implementing datastructures like trees. Structures within structures are
known as nested structures.
- main()
{
printf("\nab");
printf("\bsi");
printf("\rha");
}
Answer:
hai
Explanation:
\n - newline
\b - backspace
\r - linefeed
- main()
{
int i=5;
printf("%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.
No comments:
Post a Comment