解释一下C语言中的引用和指针?

#include
int main(){
int a=2,b=4;
int *p;
printf("add of a=%d

",&a);
printf("add of b=%d

",&b);
p=&a; // p points to variable a
printf("a value is =%d

",a); // prints a value
printf("*p value is =%d

",*p); //prints a value
printf("p value is =%d

",p); //prints the address of a
p=&b; //p points to variable b
printf("b value is =%d

",b); // prints b value
printf("*p value is =%d

",*p); //prints b value
printf("p value is =%d

",p); //prints add of b
}