Open In App

A C/C++ Pointer Puzzle

Prerequisite: Pointers
Assuming the size of int = 4 bytes, size of a pointer variable = 8 byte, what will be the output of following program.
Few hints on how to solve it:




// CPP program to illustrate concept
// of pointers
#include <stdio.h>
int main()
{
    int a[4][5][6];
    int x = 0;
    int* a1 = &x;
    int** a2 = &a1;
    int*** a3 = &a2;
    printf("%d %d %d %d\n", sizeof(a), sizeof(a1), sizeof(a2), sizeof(a3));
  
    printf("%d ", (char*)(&a1 + 1) - (char*)&a1);
    printf("%d ", (char*)(&a2 + 1) - (char*)&a2);
    printf("%d ", (char*)(&a3 + 1) - (char*)&a3);
    printf("%d \n", (char*)(&a + 1) - (char*)&a);
  
    printf("%d ", (char*)(a1 + 1) - (char*)a1);
    printf("%d ", (char*)(a2 + 1) - (char*)a2);
    printf("%d ", (char*)(a3 + 1) - (char*)a3);
    printf("%d \n", (char*)(a + 1) - (char*)a);
  
    printf("%d ", (char*)(&a[0][0][0] + 1) - (char*)&a[0][0][0]);
    printf("%d ", (char*)(&a[0][0] + 1) - (char*)&a[0][0]);
    printf("%d ", (char*)(&a[0] + 1) - (char*)&a[0]);
    printf("%d \n", (char*)(&a + 1) - (char*)&a);
  
    printf("%d ", (a[0][0][0] + 1) - a[0][0][0]);
    printf("%d ", (char*)(a[0][0] + 1) - (char*)a[0][0]);
    printf("%d ", (char*)(a[0] + 1) - (char*)a[0]);
    printf("%d \n", (char*)(a + 1) - (char*)a);
}

Output:

480 8 8 8
8 8 8 480
4 8 8 120
4 24 120 480
1 4 24 120

Related Articles:


Article Tags :