C pointers quiz




C pointers quiz with answers and explanation


1.
What is meaning of following declaration?
int(*ptr[5])();

(A) ptr is pointer to function.
(B) ptr is array of pointer to function.
(C) ptr is pointer to such function which return type is array.
(D) ptr is pointer to array of function.
(E) None of these


Explanation:
Here ptr is array not pointer.


2.
What is meaning of following
pointer declaration?
int(*(*ptr1)())[2];

(A) ptr is pointer to function.
(B) ptr is array of pointer to function.
(C) ptr is pointer to such function which return type is pointer to an
array.
(D) ptr is pointer array of function.
(E) None of these


3.
What is size of generic pointer
in c?

(A) 0
(B) 1
(C) 2
(D) Null
(E) Undefined

Explanation:
Size of any type of pointer
is 2 byte (In case of near
pointer)
Note. By default all pointers are near pointer if default memory model is small.


4.
What will be output of following
c code?

#include<stdio.h>
int main(){
    int *p1,**p2;
    double *q1,**q2;
    clrscr();
    printf("%d %d
"
,sizeof(p1),sizeof(p2));
    printf("%d %d",sizeof(q1),sizeof(q2));
    getch();
    return 0;
}

(A) 1 2 4 8
(B) 2 4 4 8
(C) 2 4 2 4
(D) 2 2 2 2
(E) 2 2 4 4


Explanation:
Size of any type of pointer
is 2 byte (In case of near
pointer)


5.
What will be output if you will
compile and execute the following c code?

#include<stdio.h>
int main(){
char huge *p=(char *)0XC0563331;
char huge *q=(char *)0XC2551341;
if(p==q)
printf("Equal");
else if(p>q)
printf("Greater than");
else
printf("Less than");
return 0;
}

(A) Equal
(B) Greater than
(C) Less than
(D) Compiler error
(E) None of above


Explanation:
As we know huge pointers compare
its physical address.
Physical address of huge pointer
p
Huge address: 0XC0563331
Offset address: 0x3331
Segment address: 0XC056
Physical address= Segment address
* 0X10 + Offset address
=0XC056 * 0X10 +0X3331
=0XC0560 + 0X3331
=0XC3891
Physical address of huge pointer
q
Huge address: 0XC2551341
Offset address: 0x1341
Segment address: 0XC255
Physical address= Segment address
* 0X10 + Offset address
=0XC255 * 0X10 +0X1341
=0XC2550 + 0X1341
=0XC3891
Since both huge pointers p and q
are pointing same physical address so
if condition
will true.


6.
What will be output if you will
compile and execute the following c code?

#include<stdio.h>
int main(){
int a=5,b=10,c=15;
int
*arr[]={&a,&b,&c};
printf("%d",*arr[1]);
return 0;

}
(A)

5
(B) 10
(C) 15
(D) Compiler error
(E) None of above


Explanation:
Array element cannot be
address of auto variable. It can
be address of static or extern variables.


7.
What will be output if you will
compile and execute the following c code?

#include<stdio.h>
int main(){
int
a[2][4]={3,6,9,12,15,18,21,24};
printf("%d %d
%d"
,*(a[1]+2),*(*(a+1)+2),2[1[a]]);
return 0;
}


(A) 15 18 21
(B) 21 21 21
(C) 24 24 24
(D) Compiler error
(E) None of above


Explanation:
In c,
a [1][2]
=*(a [1] +2)
=*(*(a+1) +2)
=2[a [1]]
=2[1[a]]
Now, a [1] [2] means 1*(4) +2=6th
element of an array staring from zero i.e. 21.


8.
What will be output if you will
compile and execute the following c code?

#include<stdio.h>
int main(){
const int x=25;
int * const p=&x;
*p=2*x;
printf("%d",x);
return 0;
}

(A) 25
(B) 50
(C) 0
(D) Compiler error
(E) None of above


Explanation:
const keyword in c doesn’t make
any variable as constant but it only makes the variable as read only. With the
help of pointer we can modify the const
variable. In this example pointer p is pointing to address of variable x. In
the following line:
int * const p=&x;
p is constant pointer while content of p i.e. *p is not
constant.
*p=2*x put the value 50 at
the memory location of variable x.


9.
What will be output if you
will compile and execute the following c code?

#include<stdio.h>
int main(){
static char *s[3]={"math","phy","che"};
typedef char *( *ppp)[3];
static ppp
p1=&s,p2=&s,p3=&s;
char *
(*(*array[3]))[3]={&p1,&p2,&p3};
char *
(*(*(*ptr)[3]))[3]=&array;
p2+=1;
p3+=2;
printf("%s",(***ptr[0])[2]);
return 0;
}
(A) math
(B) phy
(C) che
(D) Compiler error
(E) None of these


Explanation:
Here ptr
is pointer to array of pointer to string.
P1,
p2, p3 are pointers to array of string.
array[3]
is array which contain pointer to array of string.
Pictorial representation:



Note: In the above
figure upper part of box represent content and lower part represent memory
address. We have assumed arbitrary address.

As we know p[i]=*(p+i)
(***ptr[0])[2]=(*(***ptr+0))[2]=(***ptr)[2]
=(***(&array))[2] //ptr=&array
=(**array)[2] //From rule
*&p=p
=(**(&p1))[2] //array=&p1
=(*p1)[2]
=(*&s)[2] //p1=&s
=s[2]=”che”


10.
What will be output if you will
compile and execute the following c code?

#include<conio.h>
#include<stdio.h>
int display();
int(*array[3])();
int(*(*ptr)[3])();
int main(){
array[0]=display;
array[1]=getch;
ptr=&array;
printf("%d",(**ptr)());
(*(*ptr+1))();
return 0;
}

int display(){
int x=5;
return x++;
}

(A) 5
(B) 6
(C) 0
(D) Compiler error
(E) None of these


Explanation:
In this example:
array []: It is array of
pointer to such function which parameter is void and return
type is int data type.
ptr: It is pointer to array
which contents are pointer to such function which parameter is void and return type is int
type data.

(**ptr)() = (** (&array)) () //ptr=&array
= (*array) () // from rule
*&p=p
=array [0] () //from rule
*(p+i)=p[i]
=display () //array[0]=display
(*(*ptr+1))()
=(*(*&array+1))()
//ptr=&array
=*(array+1) () // from rule
*&p=p
=array [1] () //from rule
*(p+i)=p[i]
=getch () //array[1]=getch


11.
What will be output if you will
compile and execute the following c code?

#include<stdio.h>
int main(){
int i;
char far *ptr=(char *)0XB8000000;
*ptr='A';
*(ptr+1)=1;
*(ptr+2)='B';
*(ptr+3)=2;
*(ptr+4)='C';
*(ptr+5)=4;
return 0;
}

Output:
It output will
be A, B and C in blue, green and red color respectively. As shown in following
figure:






12.
What will be output if you will
compile and execute the following c code?
#include<stdio.h>
#include <dos.h>
int main(){
int j;
union REGS i,o;
char far *ptr=(char *)0XA0000000;
i.h.ah=0;
i.h.al=0x13;
int86(0x10,&i,&o);
for(j=1;j<=100;j++){
*(ptr+j)=4;
}
return 0;
}

Outpt:
One red color
line in the graphics console as shown in the following figure:






13.
What will be output if you
will compile and execute the following c code?

#include<stdio.h>
int dynamic(int,...);
int main(){
int x,y;
x=dynamic(2,4,6,8,10,12,14);
y=dynamic(3,6,9,12);
printf("%d %d
"
,x,y);
return 0;
}

int dynamic(int s,...){
void *ptr;
ptr=...;
(int *)ptr+=2;
s=*(int *)ptr;
return s;
}

(A) 8 12
(B) 14 12
(C) 2 3
(D) Compiler error
(E) None of these



Explanation:
In c three
continuous dots is known as ellipsis which is variable number of arguments of
function. In this example ptr is generic pointer which is pointing to first
element of variable number of argument. After incrementing it will point third
element.


14.
Which of the following is not correct pointer
declaration?

(i)int * const * ptr
(ii)int const * const * ptr;
(iii)const int ** const ptr;
(iv)const int const **ptr;
(v)int const ** const ptr;

(A) All are collect.
(B) Only (ii) is incorrect.
(C) Only (iv) is incorrect.
(D) Both (iii) and (v) are incorrect.
(E) All are incorrect.


15.
What will be output if you
will compile and execute the following c code?

#include<stdio.h>
int main(){
    char arr[]="C
Question Bank"
;
    float *fptr;
    fptr=(float *)arr;
    fptr++;
    printf("%s",fptr);
    return 0;
}
(A) C Question Bank
(B) Question Bank
(C) Bank
(D) estion Bank
(E) Compilation error


16.
In the following declaration ptr is
far * near * huge * ptr;


(A) Near pointer.
(B) Far pointer.
(C) Huge pointer.
(D) Near and far pointer.
(E) Near,far and huge pointer.


17.
What will be output if you
will compile and execute the following c code?

#include<stdio.h>
int main(){
    char arr[]="C
Question Bank"
;
    char *p;
    p+=3;
    p=arr;
    p+=3;
    *p=100;
    printf("%s",arr);
    return 0;
}

(A) C question Bank
(B) C quesdion Bank
(C) C qdestion Bank
(D) C q100estion Bank
(E) Compilation error


18.

Which of the following ptr is not pointer?

(A) int(*ptr)()
(B) long **volatile*ptr
(C) int(*ptr[2])[3]
(D) float *  (*ptr)[5]
(E) All are pointer


19.
Which of the following is incorrect c
statement?


(A) We can increment array pointer
(B) We can increment function pointer
(C) We can increment structure pointer
(D) We can increment union pointer.
(E) We can increment generic pointer.


20.
Which of the following incorrect about far
pointer?

(i)Size of far pointer is four byte.
(ii)Far pointer can points all segment of
residence memory
(iii)If we will increment far pointer it can
move from one segment to another segment.
Choose correct option:
(A) Only (i) is incorrect.
(B) Only (ii) is incorrect.
(C) Only (iii) is incorrect.
(D)

Both (ii) and (iii) are incorrect.
(E) All three are incorrect.

No comments: