Exercise: Questions on Pointer Basics


Questions on Pointer Basics : Question 1 :
What is the output of following program?
# include <stdio.h>
void fun(int x)
{
    x = 30;
}

int main()
{
  int y = 20;
  fun(y);
  printf("%d", y);
  return 0;
}

30
20
Compiler Error
Runtime Error
Show Answer
Questions on Pointer Basics : Question 2 :
Output of following program?
# include <stdio.h>
void fun(int *ptr)
{
    *ptr = 30;
}

int main()
{
  int y = 20;
  fun(&y);
  printf("%d", y);

  return 0;
}

20
30
Compiler Error
Runtime Error
Show Answer
Questions on Pointer Basics : Question 3 :
Output of following program?
#include <stdio.h>

int main()
{
    int *ptr;
    int x;

    ptr = &x;
    *ptr = 0;

    printf(" x = %d\n", x);
    printf(" *ptr = %d\n", *ptr);

    *ptr += 5;
    printf(" x  = %d\n", x);
    printf(" *ptr = %d\n", *ptr);

    (*ptr)++;
    printf(" x = %d\n", x);
    printf(" *ptr = %d\n", *ptr);

    return 0;
}

x = 0
*ptr = 0
x = 5
*ptr = 5
x = 6
*ptr = 6
x = garbage value
*ptr = 0
x = garbage value
*ptr = 5
x = garbage value
*ptr = 6
x = 0
*ptr = 0
x = 5
*ptr = 5
x = garbage value
*ptr = garbage value
x = 0
*ptr = 0
x = 0
*ptr = 0
x = 0
*ptr = 0
Show Answer
Questions on Pointer Basics : Question 4 :
Consider a compiler where int takes 4 bytes, char takes 1 byte and pointer takes 4 bytes.
#include <stdio.h>

int main()
{
    int arri[] = {1, 2 ,3};
    int *ptri = arri;

    char arrc[] = {1, 2 ,3};
    char *ptrc = arrc;

    printf("sizeof arri[] = %d ", sizeof(arri));
    printf("sizeof ptri = %d ", sizeof(ptri));

    printf("sizeof arrc[] = %d ", sizeof(arrc));
    printf("sizeof ptrc = %d ", sizeof(ptrc));

    return 0;
}

sizeof arri[] = 3 sizeof ptri = 4 sizeof arrc[] = 3 sizeof ptrc = 4
sizeof arri[] = 12 sizeof ptri = 4 sizeof arrc[] = 3 sizeof ptrc = 1
sizeof arri[] = 3 sizeof ptri = 4 sizeof arrc[] = 3 sizeof ptrc = 1
sizeof arri[] = 12 sizeof ptri = 4 sizeof arrc[] = 3 sizeof ptrc = 4
Show Answer
Questions on Pointer Basics : Question 5 :
Assume that float takes 4 bytes, predict the output of following program.
#include <stdio.h>

int main()
{
    float arr[5] = {12.5, 10.0, 13.5, 90.5, 0.5};
    float *ptr1 = &arr[0];
    float *ptr2 = ptr1 + 3;

    printf("%f ", *ptr2);
    printf("%d", ptr2 - ptr1);

   return 0;
}

90.500000 3
90.500000 12
10.000000 12
0.500000 3
Show Answer
Questions on Pointer Basics : Question 6 :
#include<stdio.h>
int main()
{
    int arr[] = {10, 20, 30, 40, 50, 60};
    int *ptr1 = arr;
    int *ptr2 = arr + 5;
    printf("Number of elements between two pointer are: %d.", 
                                (ptr2 - ptr1));
    printf("Number of bytes between two pointers are: %d",  
                              (char*)ptr2 - (char*) ptr1);
    return 0;
}
Assume that an int variable takes 4 bytes and a char variable takes 1 byte

Number of elements between two pointer are: 5. Number of bytes between two pointers are: 20
Number of elements between two pointer are: 20. Number of bytes between two pointers are: 20
Number of elements between two pointer are: 5. Number of bytes between two pointers are: 5
Compiler Error
Runtime Error
Show Answer
Questions on Pointer Basics : Question 7 :
#include<stdio.h> 
int main() 
{ 
   int a; 
   char *x; 
   x = (char *) &a; 
   a = 512; 
   x[0] = 1; 
   x[1] = 2; 
   printf("%d\n",a);   
   return 0; 
}
What is the output of above program?

Machine dependent
513
258
Compiler Error
Show Answer
Questions on Pointer Basics : Question 8 :
 int main()
 {
  char *ptr = "PROcoder";
  printf("%c\n", *&*&*ptr);
  return 0;
 }
 

Compiler Error
Garbage Value
Runtime Error
P
Show Answer
Questions on Pointer Basics : Question 9 :
#include<stdio.h>
void fun(int arr[])
{
  int i;
  int arr_size = sizeof(arr)/sizeof(arr[0]);
  for (i = 0; i < arr_size; i++)
      printf("%d ", arr[i]);
}

int main()
{
  int i;
  int arr[4] = {10, 20 ,30, 40};
  fun(arr);
  return 0;
} 

10 20 30 40
Machine Dependent
10 20
Northing
Show Answer
Questions on Pointer Basics : Question 10 :
The reason for using pointers in a Cprogram is

Pointers allow different functions to share and modify their local variables.
To pass large structures so that complete copy of the structure can be avoided.
Pointers enable complex “linked" data structures like linked lists and binary trees.
All of the above
Show Answer