Q:

About pointers and ASCII code

im learning more about c language and i have 1 doubt about 1 code that i have seen. 
main(){
    int i = (65*256+66)*256+67;

    int* pi; 
    char* pc;

    pi = &i; 

    pc = (char*)pi; 

    printf("%c %c %c \n", *pc, *(pc+1), *(pc+2));

}

Output is: C B A
I know that ASCII code of A is 65, B is 66, and C is 67 but the variable i is none of them.
If i put variable i=65, the output is just A and dont show B or C, why?
And i would like to know why this code have that output. Thanks for any help.

A:

The line 
int i = (65*256+66)*256+67;

turns i into the following
00000000 01000001 01000010 01000011

int = 4 bytes or 4 groups of 8 bits
char = 1 byte or 1 group of 8 bits.
What happens is that a char pointer is used to point to a subset of the original int bits.
At first the pointer points to the 8 least significant bits (the group to the right). 
And the letter C is printed. Then, the pointer it self is incremented by 1 which makes it point to the next group of 8 bits in the memory which happens to be B. And once more for the A.

