指针输出*p,p和&p分别输出的是什么数据啊该如何解决

指针输出*p,p和&p分别输出的是什么数据啊
以下是我的一小段测试用的程序
void   test(){
      int   a=8;
      int   *p=&a;
      p=(int   *)malloc(N*sizeof(int));
    //   printf( "%d\n ",*p);
    //a.   cout < <&p;//0x0012ff14
    //b.   cout < <*p;//8
      c.   cout < <p;//0x000431c50
}

b句输出p所指向的内存单元的值,而a语句和c语句分别输出的是什么呢?
a输出的是p本身所占内存单元的地址么?
c输出的是p所指向的内存单元的地址么?

------解决方案--------------------
*p指针的内容
p指针的值
&p变量p的地址
------解决方案--------------------
对了 
&这个就是取地址