C 语言学习笔记 1 / 6 指向指针的指针和引用指针变量 -----------------------------------------------------------**p 与 *&p 的差别 声明:以下内容仅为学习的理解,仅供参考! **p 等价于*(*p),这里,p 就是指向指针的指针,在这里*就是取地址运算符;*p 是指向p,p 是指针,*(*p)就是指向*p,*p 也是指针。 *&p 等价于*(&p),这里,p 就是指针变量的引用,在这里&就是引用,引用就是一个别名,p 就是一个指针变量的别名。 “引用定义时必须初始化,这是它与指针根本的不同”(钱能说的)。 “不能定义引用数组,不能定义指向引用的指针”(谭浩强说的)。 指针就是地址(地址的值),引用就是别名(变量的别名)。&p 出现在赋值表达式的右边的时候,&肯定是取地址运算符。&p 出现在赋值表达式左边的时候,&肯定是引用声明符(此时,它不是运算符,是声明符。) 下面用一段程序和程序的运行结果来说明他们的差别。 //指针的引用和指向指针的指针 //Filename:point1.cpp #include
using namespace std; void all1(int **p)//定义一个函数,函数的参数是一个指向”指向整型变量的指针”的指针 { int *pp = new int;//给指向整型变量的指针 pp 分配一个整型数据的内存地址 *p = pp;//指针p 指向的值是pp(这里pp 是一个指针,指向整型数据的指针) //重点说明:p p 是一个地址(指针就是地址),新分配的内存的地址 cout<<"int**p:p:"<