没有合适的资源?快使用搜索试试~ 我知道了~
首页**p与 *&p的区别, 即指向指针的指针和引用指针变量的区别
资源详情
资源评论
资源推荐

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

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论3