EmbLogic's Blog

Pointers Questions

1) What will be the output of following program ?
#include
int main()
{
char *str=”IncludeHelp”;
printf(“%c\n”,*&*str);
return 0;
}

Correct Answer
I
& is a reference operator, * is de-reference operator, We can use these operators any number of times. str points the first character of IncludeHelp, *str points “I”, * & again reference and de-reference the value of str.

2)
#include
int main()
{
int iVal;
char cVal;
void *ptr; // void pointer
iVal=50; cVal=65;

ptr=&iVal;
printf(“value =%d,size= %d\n”,*(int*)ptr,sizeof(ptr));

ptr=&cVal;
printf(“value =%d,size= %d\n”,*(char*)ptr,sizeof(ptr));
return 0;
}

Correct Answer
value =50,size= 4
value =65,size= 4
void pointer can be type casted to any type of data type, and pointer takes 4 bytes (On 32 bit compiler).
to print value using void pointer, you will have to write like this *(data_type*)void_ptr;.

3)
#include
int main()
{
char *str []={“AAAAA”,”BBBBB”,”CCCCC”,”DDDDD”};
char **sptr []={str+3,str+2,str+1,str};
char ***pp;

pp=sptr;
++pp;
printf(“%s”,**++pp+2);
return 0;

Correct Answer
BBB
*str is a array pointer of string, **sptr is array pointer(double pointer) that is pointing to str strings in reverse order. ***pp also a pointer that is pointing sptr base address.
++pp will point to 1st index of sptr that contain str+2 (“CCCCC”).
in printf(“%s”,**++pp+2); ++pp will point to str+1, and **++pp, value stored @ str+1 (“BBBBB).
and (**++pp)+2 will point the 2nd index of “BBBBB”, hence BBB will print.

4)
#include
char* strFun(void)
{
char *str=”IncludeHelp”;
return str;
}
int main()
{
char *x;
x=strFun();
printf(“str value = %s”,x);
return 0;
}

Correct Answer
str value= IncludeHelp

5)
If the address of pointer ptr is 2000, then what will the output of following program ?
[On 32 bit compiler.]
include
int main()
{
void *ptr;
++ptr;
printf(“%u”,ptr);
return 0;
}
a)2004
b)2001
c)2000
d)ERROR
Answer
Correct Answer – 4
ERROR: Size of the type is unknown or zero.
ptr is a void pointer, and the scale factor of void pointer is unknown or zero.

6) What will be the output of following program ?

#include
int main()
{
char ch=10;
void *ptr=&ch;
printf(“%d,%d”,*(char*)ptr,++(*(char*)ptr));
return 0;
}

Answer
Correct Answer -
11,11
*(char*)ptr will return the value of ch, since we know printf evaluates right to left..
so, ++(*(char*)ptr) will increase the value to 11.

7) What will be the output of following program ?
#include
int main()
{
int a=10,b=2;
int *pa=&a,*pb=&b;
printf(“value = %d”, *pa/*pb);
return 0;
}

Correct Answer
ERROR: unexpected end of file found in comment.
The compiler is treated the operator / and * as /*, that happens to be the starting of comment.
To fix the error, use either *pa/ *pb (space between operators) or *pa/(*pb).

8)
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 Answer
Explanation:

Here ptr is array not pointer.

9)
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 Answer
Explanation:
**

10)
What is size of generic pointer in c?

(A) 0
(B) 1
(C) 2
(D) Null
(E) Undefined Answer
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.

11)
What will be output of following c code?

#include
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 Answer
Explanation:

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

12)
What will be output if you will compile and execute the following c code?

#include
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 Answer
Explanation:

As we know huge pointers compare its physical address.
Physical address of huge pointer p
Huge address: 0XC0563331
Offset address: 0×3331
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: 0×1341
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.

14)
What will be output if you will compile and execute the following c code?

#include
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 Answer
Explanation:

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

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

#include
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 Answer
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.

16)
What will be output if you will compile and execute the following c code?

#include
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 Answer
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.

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

#include
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 Answer
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”

18)
What will be output if you will compile and execute the following c code?

#include
#include
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 Answer
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

19)
What will be output if you will compile and execute the following c code?

#include
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.

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

22)
What will be output if you will compile and execute the following c code?

#include
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 Answer
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.

24)
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

25)
What will be output if you will compile and execute the following c code?

#include
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 Answer

26.)

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. Answer

27)

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

#include
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 Answer

28)
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 Answer

29)
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. Answer

30.
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.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>