C questions on pointers


C questions on pointers with 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


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 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;
}


Output:

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:
**



Pointer tutorial in c



13 comments:

shailesh mota said...

EXCELLENT BLOG !!!
FOUND IT TODAY !!!
COULDNT TAKE OFF EYES , sat for 4 hrs straight to finish it off...
explaination of graphical output required !!!
and in few questions after 15 ...answers arent given!!!

vasuroshan said...

question 6 has wrong answer check it out once and some of them got no answers

Anonymous said...

Excellent forum to know and discuss the C language.... Really worth for FRESHERS and EXPERIENCED...

manojjoon said...

buddy superb blog u done excellent job

ranjith said...

plz post the answers

Murtaza said...

Awsum... Stucked to this blog....

ĕļ ÅßŐĢĄĐŐ said...

Hey! If you want to get the answers of those which are not working, just view the page source. There are areas which store the correct answer. They are like, "output('C',19)". :)

Anonymous said...

nice.....its very helpful for preperation...

Anonymous said...

awe some efforts

Anonymous said...

awesome thing... really helpfull

Anonymous said...

answer for q6 is 10.But you mentioned wrong.I had compiled it .pls check again

Unknown said...

wow

Unknown said...

Really Very helpful blog.