I was reading more about arrays vs pointers in C and wrote the following program.
#include <stdio.h> 
int arr[10] = { } ; 
typedef int (*type)[10]  ;
int main()
{
   type val = &arr ; 
   printf("Size is %lu\n", sizeof(val)) ; 
   printf("Size of int is %lu\n", sizeof(int)) ;
}
If, I execute this program, then sizeof(val) is given to be 8 and sizeof(int) is given to be 4.  
If val is a pointer to the array with 10 elements, shouldn't it's size be 40. Why is the sizeof(val) 8 ? 
 
     
     
     
     
     
     
    