一直搞不明白,c++中指针到底是个啥东西,今天遇到到c++,指向指针的指针的问题,突然有点开窍了。
举个例子:
int main(int argc, char** argv)
{
int a[5]={1,2,3,4,5};
int *p=a;
int **pointer=&p;
std::cout<<"a="<<a<<std::endl;
std::cout<<"p="<<p<<std::endl;
std::cout<<"&a[0]="<<&a[0]<<std::endl;
std::cout<<"*pointer="<<*pointer<<std::endl;
std::cout<<std::endl;
std::cout<<"poiner="<<pointer<<std::endl;
std::cout<<"&p="<<&p<<std::endl;
std::cout<<std::endl;
std::cout<<"**pointer="<<**pointer<<std::endl;
std::cout<<"*p="<<*p<<std::endl;
std::cout<<"a[0]="<<a[0]<<std::endl;
std::cout<<std::endl;
std::cout<<"&pointer="<<&pointer<<std::endl;
}
运行结果:

对于指针来说,用 int *p=a举例子, 这句代码:std::cout<<"p="<<p<<std::endl,输出的是指针p指向的变量的地址,也就是p指针所保存的内容,也就是数组a的首地址,也就是a[0]的地址。所以从运行结果可以看出来,它们的值都是相同的。对于*p来说,这句代码:std::cout<<"*p="<<*p<<std::endl;输出的是p指向的变量所保存的内容,也就是a[0]的内容。
对于&p,则表示的是指针p自身在内存中的地址。这个地址可被指向指针的指针所指。比如,int **pointer=&p;跟上面一样,pointer指向p指针在内存中的地址,也就是pointer保存p指针在内存中的地址。*pointer则保存p指针所保存的内容,即p指针所指向的a[0]的地址。其实可以这么认为,*pointer也是个地址,这个地址其实就是a[0]的地址。**pointer则是指向a[0] 中的内容。&pointer则是pointer指针在内存中的地址。

一句话,对于一个指针符号来说,它表示的是指向的对象的内从地址,*+指针符号,则表示所指向对象保存的内容。
原文:http://www.cnblogs.com/dfyz/p/5288314.html