1-----------------------------------------------------------------------------------------
What are the following notations of defining functions known as?
int abc(int a,float b)
{
/* some code */
}
int abc(a,b)
int a; float b;
{
/* some code*/
}
Answer:
i. ANSI C notation
ii. Kernighan & Ritche notation (K&R Notation)
2-----------------------------------------------------------------------------------------
main()
{
char *p;
p="%d\n";
p++;
p++;
printf(p-2,300);
}
Answer:
300
Explanation:
The pointer points to % since it is incremented twice and again decremented by 2, it points to '%d\n' and 300 is
printed.
3-----------------------------------------------------------------------------------------
main()
{
int i;
i = abc();
printf("%d",i);
}
abc()
{
_AX = 1000;
}
Answer: 1000
Explanation:< blockquote>Normally the return value from the function is through the information from the
accumulator. Here _AH is the pseudo global variable denoting the accumulator. Hence, the value of the
accumulator is set 1000 so the function returns value 1000.
4-----------------------------------------------------------------------------------------
int i;
main(){
int t;
for ( t=4;scanf("%d",&i)-t;printf("%d\n",i))
printf("%d--",t--);
}
// If the inputs are 0,1,2,3 find the o/p
Answer:
4--0
3--1
2--2
Explanation:
Let us assume some x= scanf("%d",&i)-t the values during execution will be,
t i x
4 0 -4
3 1 -2
2 2 0
5--------------------------------------------------------------------------------------------
main(){
int a= 0;int b = 20;char x =1;char y =10;
if(a,b,x,y)
printf("hello");
}
Answer:
hello
Explanation:
The comma operator has associativity from left to right. Only the rightmost value is returned and the
other values are evaluated and ignored. Thus the value of last variable y is returned to check in if.
Since it is a non zero value if becomes true so, "hello" will be printed.
6----------------------------------------------------------------------------------------------
main(){
unsigned int i;
for(i=1;i>-2;i--)
printf("c aptitude");
}
Explanation:
i is an unsigned integer. It is compared with a signed value. Since the both types doesn't match, signed
is promoted to unsigned value. The unsigned equivalent of -2 is a huge value so condition becomes false and
control comes out of the loop.
7------------------------------------------------------------------------------------------------
func(a,b)
int a,b;
{
return( a= (a==b) );
}
main()
{
int process(),func();
printf("The value of process is %d !\n ",process(func,3,6));
}
process(pf,val1,val2)
int (*pf) ();
int val1,val2;
{
return((*pf) (val1,val2));
}
Answer: The value if process is 0 !
Explanation:
The function 'process' has 3 parameters - 1, a pointer to another function 2 and 3, integers. When this
function is invoked from main, the following substitutions for formal parameters take place: func for pf, 3 for
val1 and 6 for val2. This function returns the result of the operation performed by the function 'func'.
The function func has two integer parameters. The formal parameters are substituted as 3 for a and 6 for b.
since 3 is not equal to 6, a==b returns 0. therefore the function returns 0 which in turn is returned by the
function 'process'.
8-----------------------------------------------------------------------------------------------
void main()
{
void *v;
int integer=2;
int *i=&integer;
v=i;
printf("%d",(int*)*v);
}
Answer:
Compiler Error. We cannot apply indirection on type void*.
Explanation:
Void pointer is a generic pointer type. No pointer arithmetic can be done on it. Void pointers are normally used for,
Passing generic pointers to functions and returning such pointers.
As a intermediate pointer type.
Used when the exact pointer type will be known at a later point of time.
9--------------------------------------------------------------------------------------------------
void main()
{
int i=i++,j=j++,k=k++;
printf("%d%d%d",i,j,k);
}
Answer:
Garbage values.
Explanation:
An identifier is available to use in program code from the point of its declaration. So expressions such
as i = i++ are valid statements. The i, j and k are automatic variables and so they contain some garbage
value. Garbage in is garbage out (GIGO).
10---------------------------------------------------------------------------------------------------
void main()
{
static int i=i++, j=j++, k=k++;
printf("i = %d j = %d k = %d", i, j, k);
}
Answer:
i = 1 j = 1 k = 1
Explanation:
Since static variables are initialized to zero by default.
No comments:
Post a Comment