[1] guess the output
main()
{
int i=5,j=6,z;
printf("%d",i+++j);
}
click here for Answer!!!
Answer:
11
Explanation:
the expression i+++j is treated as (i++ + j)
[2]main()
{
register i=5;
char j[ ]= "hello";
printf("%s %d",j,i);
}
click here for Answer!!!
Answer:
hello 5
Explanation:
if you declare i as register compiler will treat it as ordinary integer and it will take
integer value. i value may be stored either in register or in memory.
[3]
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);
}
click here for Answer!!!
Answer:
garbagevalue..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
meAnswer:it will print first element of 3D array.
[4]main()
{
const int i=4;
float j;
j = ++i;
printf("%d %f", i,++j);
}
click here for Answer!!!
Answer:
Compiler error
Explanation:
i is a constant. you cannot change the value of constant
[5]
main()
{
int i=-1;
-i;
printf("i = %d, -i = %d \n",i,-i);
}
click here for Answer!!!
Answer:
i = -1, -i = 1
Explanation:
-i is executed and this execution doesn't affect the value of i. In printf first you just print
the value of i. After that the value of the expression -i = -(-1) is printed.
[6]main()
{
int *j;
{
int i=10;
j=&i;
}
printf("%d",*j);
}
click here for Answer!!!
Answer:
10
Explanation:
The variable i is a block level variable and the visibility is inside that block only. But the
lifetime of i is lifetime of the function so it lives upto the exit of main function. Since the
i is still allocated space, *j prints the value stored in i since j points i.
[7]int i=10;
main()
{
extern int i;
{
int i=20;
{
const volatile unsigned i=30;
printf("%d",i);
}
printf("%d",i);
}
printf("%d",i);
}
click here for Answer!!!
Answer:
30,20,10
Explanation:
'{' introduces new block and thus new scope. In the innermost block i is declared as,
const volatile unsigned
which is a valid declaration. i is assumed of type int. So printf prints 30. In the next
block, i has value 20 and so printf prints 20. In the outermost block, i is declared as
extern, so no storage space is allocated for it. After compilation is over the linker
resolves it to global variable i (since it is the only variable visible there). So it prints i's
value as 10.
[8]#define max 5
#define int arr1[max]
main()
{
typedef char arr2[max];
arr1 list={0,1,2,3,4};
arr2 name="name";
printf("%d %s",list[0],name);
}
click here for Answer!!!
Answer:
Compiler error (in the line arr1 list = {0,1,2,3,4})
Explanation:
arr2 is declared of type array of size 5 of characters. So it can be used to declare the
variable name of the type arr2. But it is not the case of arr1. Hence an error.
Rule of Thumb:
#defines are used for textual replacement whereas typedefs are used for declaring new
types.
[9]main()
{
int y;
scanf("%d",&y); // input given is 2000
if( (y%4==0 && y%100 != 0) || y%100 == 0 )
printf("%d is a leap year");
else
printf("%d is not a leap year");
}
click here for Answer!!!
Answer:
2000 is a leap year
Explanation:
An ordinary program to check if leap year or not.
[10]main()
{
int k=1;
printf("%d==1 is ""%s",k,k==1?"TRUE":"FALSE");
}
click here for Answer!!!
Answer:
1==1 is TRUE
Explanation:
When two strings are placed together (or separated by white-space) they are
concatenated (this is called as "stringization" operation). So the string is as if it is given
as "%d==1 is %s". The conditional operator( ?: ) evaluates to "TRUE".
[11]main()
{
char not;
not=!2;
printf("%d",not);
}
click here for Answer!!!
Answer:
0
Explanation:
! is a logical operator. In C the value 0 is considered to be the boolean value FALSE, and
any non-zero value is considered to be the boolean value TRUE. Here 2 is a non-zero
value so TRUE. !TRUE is FALSE (0) so it prints 0.
[12]main()
{
char *str1="abcd";
char str2[]="abcd";
printf("%d %d %d",sizeof(str1),sizeof(str2),sizeof("abcd"));
}
click here for Answer!!!
Answer:
2 5 5
Explanation:
In first sizeof, str1 is a character pointer so it gives you the size of the pointer variable.
In second sizeof the name str2 indicates the name of the array whose size is 5
(including the '\0' termination character). The third sizeof is similar to the second one.
[13]main()
{
show();
}
void show()
{
printf("I'm the greatest");
}
click here for Answer!!!
Answer:
Compier error: Type mismatch in redeclaration of show.
Explanation:
When the compiler sees the function show it doesn't know anything about it. So the
default return type (ie, int) is assumed. But when compiler sees the actual definition of
show mismatch occurs since it is declared as void. Hence the error.
The solutions are as follows:
1. declare void show() in main() .
2. define show() before main().
3. declare extern void show() before the use of show().
[14]main()
{
i
nt i=0;
for(;i++;printf("%d",i)) ;
printf("%d",i);
}
click here for Answer!!!
Answer:
1
Explanation:
before entering into the for loop the checking condition is "evaluated". Here it evaluates
to 0 (false) and comes out of the loop, and i is incremented (note the semicolon after
the for loop).
[15]main()
{
i
nt i;
printf("%d",scanf("%d",&i)); // value 10 is given as input here
}
click here for Answer!!!
Answer:
1
Explanation:
Scanf returns number of items successfully read and not 1/0. Here 10 is given as input
which should have been scanned successfully. So number of items read is 1.
incorrect explaination for Q6
ReplyDelete"The variable i is a block level variable and the visibility is inside that block only. But the
lifetime of i is lifetime of the function so it lives upto the exit of main function. Since the
i is still allocated space, *j prints the value stored in i since j points i. "
This is not true, it prints the value 10 even though this variable has been deallocated, the reason is that the OS does not claim that memory segment for every few bytes that are not in use, it only claims memory in multiple of 4K (for 32-bit systems)
Q6 explaination is right..
ReplyDeleteread about "dangling pointers"...there is a concept of dangling pointers in that..not..operating system or 4k memory.
Hi,
ReplyDeleteYour answer is incorrect
This can be better understood in C++
struct A
{
A()
{
printf("A()\n");
}
~A()
{
printf("~A()\n");
}
int i;
};
int _tmain(int argc, _TCHAR* argv[])
{
A *i=0;
{
A a;
i=&a;
i->i=10;
}
printf(" %d ",i->i);
return 0;
}
as you can see that the variable i is still accessed after the object has gone out of scope (that its destructor has been called)