I came across a code whoes output I'm not able to understand.The code is-
int main() 
{       
  int a[] = {1, 2, 3, 4, 5, 6};   
  int *ptr = (int*)(&a+1); 
  printf("%d ", *(ptr-1) ); 
  return 0; 
} 
The output of above code is coming out 6, but i think that it should be 1. Please explain why it is 6.
                        
In your question "&a" is address of the whole array a[]. If we add 1 to &a, we get “base address of a[] + sizeof(a)”. And this value is typecasted to int *. So ptr points to the memory just after 6 . ptr is typecasted to "int *" and value of *(ptr-1) is printed. Since ptr points memory after 6,so ptr – 1 points to 6.