引用指针混合使用

 

  • p:  是一个指针的指针,在这里我们不会去对它做修改,否则会丢失这个指针指向的指针地址
  • *p:  是被指向的指针,是一个地址。如果我们修改它,修改的是被指向的指针的内容。换句话说,我们修改的是main()方法里 *pn指针
  • **p: 两次解引用是指向main()方法里*pn的内容
int value = 3;

void func(int **p)
{
    *p = &value;
}

void func(int *&p)
{
	p = &value;
}
int _tmain(int argc, _TCHAR* argv[])
{
#if 0
	int n = 2;
	int *pn = &n;
	cout << *pn << endl;
	func(pn);
	cout << *pn << endl;
#else
    int n = 1;
    int *pn = &n;
    cout << *pn << endl;
    func(&pn);
    cout << *pn <<endl;
#endif

	getchar();
	return 0;
}

int *&p 实际上,本质p是一个引用,对一个指针的引用,所以对p的修改实际上就是对指针的修改。这里在从新认识指针 int *p,本质为地址的地址,也就是说p指针中放的是一个地址,本身p也有一个地址。所以当int *& p初始化之后那么p指向的地址就不会改变,也就是存放地址的内存空间。但是这里面放的内容可以改变,这就是引用的特点,在这里实际上就是里面放的地址可以改变。 

引用运行结果: 

 int *p 本质为地址的地址,也就是说,p指向了一个内存空间,里面放了一个地址。如果我们通过值传递,将直接传递给函数,那么内部的副本不会改变p本身。类似于在函数外部是int *p,在内部是int * tmpp,两者里面放的内容是一样的,也就是真是的地址,但是两者本身的地址是不一样的,对tmpp的修改不会作用到p上。 使用指针的指针,可以做到这点。int **p;在函数内部首先解引用,实际上就得到了p的真是地址,从而可以对p本身进行修改。

指针的指针运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值