Значение указателя не ожидается

#pointers

Вопрос:

Вот мой фрагмент кода. Пожалуйста, взгляните

 #include<stdio.h>
int main(void){
int a=11111111;
int *p;
p=amp;a;
printf("Address of a is : %pn",p);
printf("Value pointed by p : %pn",*p);
char *p0;
p0=(char *)p; //typecasting
printf("Value in a: %pn",a);
printf("Value at address p 1 : %pn",*(p 1));
printf("Size is : %dn",sizeof(p));
printf("Address pointer by p0 : %pn",p0);
printf("Size is : %dn",sizeof(p0));
printf("Value pointed by p0 : %p, : %p, %p, %p",*(p0),*(p0 1),*(p0 2),*(p0 3));
 

}

В этом коде c значение, которое я пытаюсь получить, является последним выводом, должно дать мне что-то вроде разделенных значений 00000000 10101001 10001010 11000111 в шестнадцатеричном формате… Но вместо этого я получаю

Адрес a : 0x7fff9dff99bc Значение, указанное p : 0xa98ac7 Значение в a: 0xa98ac7 Значение по адресу p 1 : 0x4011e0 Размер : 8 Указатель адреса p0 : 0x7fff9dff99bc Размер : 8 Значение, указанное p0 : 0xffffffc7, : 0xffffff8a, 0xffffffa9, (ноль)

Не могли бы вы, пожалуйста, объяснить, почему это происходит, я уверен, что извлеку из этого урок.