Character pointer storing the address of an integer. correct?

#include<stdio.h>
int main()
{
int arr[3] ={2,3,4};
char p;
p=arr; // correct?
p=(char
)((int*)( p ));
printf("%d “,p);
p=(int
)(p+1);
printf(”%d",*p);
return 0;
}

// expecting error at line 6 but i get output: 2 0, I couldn’t understand the reason behind it.