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
Explanation: **
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 soif 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.
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.
Explanation: **
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
Explanation: **
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.
Explanation: **
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
Explanation:
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
Explanation: **
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.
Explanation: **
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.
Explanation: **
click the Below link download this file |
|