I'm currently doing MIT Opencourseware's Practical Programming in C. I'm finding pointers a little bit confusing. Here are some questions:

1)

int *pa=arr

Suppose char * pc = (char*)pa; what value of i satisfies

(int *)(pc+i)== pa + 3? [Answer:i=12]

I get that the address is 12 bits down because each int is 4 bits. But other than that I don't understand much. What's difference does it make inclosing char* in parenthesis?. If someone could example what each equation means I'd greatly appreciate it.

2) What's the difference between *pointername and pointername?

Thanks!