#include <stdio.h>
#include <stdlib.h>

int main()
{
char a = 0;
//int * p = (int * ) malloc (4 * sizeof(int));
int * p = (int * ) malloc (4);
char * cp = (char * ) malloc (4 * sizeof(char));

a = 1;
a = (char)(~0);
a = 0;
a |= (~((~0)<<5) <<3);

//step-by-step program
a = 0;
a = (char)(~0);
a = a << 5;
a = ~a;
a = a << 3;

if(NULL == p)
{
printf("malloc failed\n");
return -1;
}

if(NULL == cp)
{
printf("malloc failed\n");
return -1;
}

*(p+0) = 1;
*(p+1) = 3;
*(p+2) = 5;
*(p+3) = 4;
*(cp+0) = 1;
*(cp+1) = 3;
*(cp+2) = 5;
*(cp+3) = 4;
//*(p+4) = 6; //编译通过,但无法运行。
printf("%d\n", *(p+3));

free (p);

free (cp);

return 0;
}