void main() { int **p; int a=5; *p=&a; printf("%d",**p); } 这是编译不过的,后来用VC调试了下,发现是这样的 因为*p其实是p所指向的一个内存单元,而p却未指向任何地方,所以*p=&a这句是通不过的 之前没深想,认为 初始好p后,p和*p的指针值一样,其实不然,(估计受二维数组影响了) int b=3;//&b=0012FF7C int a[1]={5};//a=0x0012FF78 int *p1,**pp; p1=a;//这里p1赋值成0012FF78,正常 pp=&p1;但这里就这样了,pp变成0012FF74,同时*pp也就是pp指向的内容变成0012FF78, *pp=&b;//由于上面的原因,在这里后,pp0012FF74所指向的内容变成0012FF7C,所以到这句后,*p1输出的值会是3