More on Pointer in c

Posted by Stephen thangaraj at 19:21
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 


If you enjoyed this post and wish to be informed whenever a new post is published, then make sure you subscribe to my regular Email Updates. Subscribe Now!


Kindly Bookmark and Share it:

YOUR ADSENSE CODE GOES HERE

0 comments:

Have any question? Feel Free To Post Below:

 

© 2011. All Rights Reserved | Interview Questions | Template by Blogger Widgets

Home | About | Top