Pointers in C Questions and Answers

Pointers in C Questions and Answers

PCBWay

These questions and answers in Pointers in C have been prepared to help you in interviews and exams.

JAK Electronics

Q1. Combine the following two statements into one?

char *p;

p = (char*) malloc (100) ;

Answer :

char *p = (char*) malloc (100);

Note that the tpecasting operation can be dropped completely if this program is built using gcc compiler.

Q2. Are the expressions *ptr++ and ++*ptr same?

Answer :

No. *ptr++ increments the pointer and not the value pointed by it, whereas ++*ptr increments the value being pointed to by ptr.

++*ptr works like *ptr = *ptr+1

Q3. Can you write another expression which does the same job as ++*ptr ?

Answer :

(*ptr)++

Q4. What would be the equivalent pointer expression for referring the array element a[i][j][k][l] ?

Answer : 

*(*(*(*(a+i)+j)+k)+l)

Q5. If the size of an integer is 4 bytes what will be the output of the following program?

#include <stdio.h>

int main()

{

   int arr[] = {12, 13, 14, 15, 16};

  printf ("%d %d %d\n", sizeof (arr), sizeof (*arr), size of (arr[0]));

}

Answer : 

20  4  4

Q6. What will be the output of the following program assuming that the array begins at location 1002 and size of an integer is 4 bytes?

#include <stdio.h>
int main()

{

int a[3][4] = {

               1,2,3,4,

               5,6,7,8,

               9,10,11,12

              };

printf ("%u%u%u\n", a[0]+1,*(a[0]+1),*(*(a+0)+1));

return 0;

}

Answer :

1006  2  2

Q7. Will the following program compile?

#include <stdio.h>

int main()

{

   char str[5] = "fast enough";

   return 0;

}

Answer :

Yes. The compiler never detects the error if bounds of an array are exceeded.

Q8. Which of the following is the correct output for the program given below?

#include <stdio.h>

int main()

{

int arr[3] = {2,3,4};

char*p;

p=(char*)arr;

printf ("%d",*p);

p=p+1;

printf ("%d\n",*p);

return 0;

}

A.  2 3

B.  2 0

C.  1 0

D.  Garbage values

Answer : B

Q9. Which of the following is the correct output of the program given below?

#include <stdio.h>

int main()

{

int arr[2][2][2] = {10,2,3,4,5,6,7,8};

int *p, *q;

p = &arr[1][1][1];

q = (int*) arr;

printf ("%d %d\n", *p, *q);

return 0;

}

A.  8  10

B.  10 2

C.  8  1

D. Garbage values

Answer : A

Q10. What will be the output of the following program assuming that the array begins at location 1002?

#include <stdio.h>

int main()

{

 int a[2][3][4] = {

                   {

                     1,2,3,4,

                     5,6,7,8,

                     9,1,1,2

                  },

                  {

                    2,1,4,7,

                    6,7,8,9,

                    0,0,0,0

                 }

              };

 printf ("%u %u %u %d\n", a, *a, **a, ***a);

 return 0;

}

Answer:

1002  1002  1002  1