Home Interview Questions and AnswersTechnical Interview Questions and AnswersC Programming C Language Pointer Interview Questions and Answers For Freshers Part-1

1. What is indirection?

If you declare a variable, its name is a direct reference to its value. If you have a pointer to a variable, or any other object in memory, you have an indirect reference to its value. If p is a pointer, the value of p is the address of the object. *p means “apply the indirection operator to p”; its value is the value of the object that ppoints

*p is an lvalue; like a variable, it can go on the left side of an assignment operator, to change the value. If p is a pointer to a constant, *p is not a modifiable lvalue; it can’t go on the left side of an assignment.

Consider the following program. It shows that when p points to i, *p can appear wherever i can.
[C]
#include <stdio.h>

int main()

{

int i;

int *p;

i = 5;

p = & i;    /* now *p == i */

printf(“i=%d, p=%P, *p=%d\n”, i, p, *p);

*p = 6;     /* same as i = 6 */

printf(“i=%d, p=%P, *p=%d\n”, i, p, *p);

return 0;

}
[/C]
2. How many levels of pointers can you have?

The answer depends on what you mean by “levels of pointers.” If you mean “How many levels of indirection can you have in a single declaration?” the answer is “At least 12.”
[C]
int i = 0;

int *ip01 = & i;

int **ip02 = & ip01;

int ***ip03 = & ip02;

int ****ip04 = & ip03;

int *****ip05 = & ip04;

int ******ip06 = & ip05;

int *******ip07 = & ip06;

int ********ip08 = & ip07;

int *********ip09 = & ip08;

int **********ip10 = & ip09;

int ***********ip11 = & ip10;

int ************ip12 = & ip11;

************ip12 = 1; /* i = 1 */
[/C]
If you mean “How many levels of pointer can you use before the program gets hard to read,” that’s a matter of taste, but there is a limit. Having two levels of indirection (a pointer to a pointer to something) is common. Any more than that gets a bit harder to think about easily; don’t do it unless the alternative would be worse.

Consider the following program “A circular list that uses infinite indirection”.
[C]
/* Would run forever if you didn’t limit it to MAX */

#include <stdio.h>

struct circ_list

{

char    value[ 3 ];     /* e.g., “st” (incl ‘\0’) */

struct circ_list        *next;

};

struct circ_list    suffixes[] = {

“th”, & suffixes[ 1 ], /* 0th */

“st”, & suffixes[ 2 ], /* 1st */

“nd”, & suffixes[ 3 ], /* 2nd */

“rd”, & suffixes[ 4 ], /* 3rd */

“th”, & suffixes[ 5 ], /* 4th */

“th”, & suffixes[ 6 ], /* 5th */

“th”, & suffixes[ 7 ], /* 6th */

“th”, & suffixes[ 8 ], /* 7th */

“th”, & suffixes[ 9 ], /* 8th */

“th”, & suffixes[ 0 ], /* 9th */

};

#define MAX 20

int main()

{

int i = 0;

struct circ_list    *p = suffixes;

while (i <= MAX)

{

printf( “%d%s\n”, i, p->value );

++i;

p = p->next;

}

return 0;

}
[/C]