指针(ElementType *e)、指针引用(ElementType *&e) 和引用(ElementType &e)的分析

  在区别分析指针(ElementType *e)和指针引用(ElementType *&e)之前先来明确一下概念:
指针:
  指针利用地址,它直接指向存在电脑存储器中某一地址。由于通过地址能找到所需的变量单元,可以说,地址指向变量单元。因此,将这一指向形象化的称为“指针”。意思是通过它能找到它指向的地址的内存单元。

ElementType *p;
//声明了一个ElementType(变量类型:int、struct等等)型的指针,它能够指向一个
ElementType型变量,这里没有进行初始化,所以它的指向为空。

引用:
  引用就是某一变量的一个别名,(&也有理解为取地址,不过引用我觉得更贴切)对引用的操作与对变量直接操作完全一样。
  引用的声明方法:类型标识符 &引用名=目标变量名;。

ElementType &e = t;//声明了一个对变量t的引用,对e的操作就是对t的操作。
例:
int main(){ 
	int t = 2;
	int &e = t;
	e++;
	cout<<t<<endl;//t的输出是3,e++就相当于t++;
}

指针、指针引用、引用的分析:

举个栗子:

#include<iostream>
using namespace std;	
int *p = 0;
void fun1(int *p){//对指针p指向的地址的内存单元进行操作,
	*p = 1;
}
void fun2(int *&p){//似乎和指针一样,都是对p指向的地址的内存单元进行操作
	*p = 2;
}
void fun3(int p){//传过来的是p的值,而不是p本身,
//这里的p是局部变量不会影响到主函数中p的值
	p = 3;
}
void fun4(int &p2){//传过来的是地址(&为取地址运算符),也可以理解为p的引用
//为方便区分这里将p的别名改为p2,或者说p2是主函数中p的引用,对p2的操作就是对p的操作
	p2 = 4; 
} 
int main(){
	int tmp = 0;
	p = &tmp;
	cout<<"*p = "<<*p<<",tmp = "<<tmp<<endl;//*p = 0,tmp = 0
	
	tmp = 0,p = &tmp;//指针p指向的是tmp的地址,也就是 *p == tmp(*取内容)
	fun1(p);
	cout<<"*p = "<<*p<<",tmp = "<<tmp<<endl;//*p = 1,tmp = 1
	
	tmp = 0,p = &tmp;
	fun2(p);
	cout<<"*p = "<<*p<<",tmp = "<<tmp<<endl;//*p = 2,tmp = 2
	
	tmp = 0,p = &tmp;
	fun3(*p);
	cout<<"*p = "<<*p<<",tmp = "<<tmp<<endl;//*p = 0,tmp = 0
	
	tmp = 0,p = &tmp;
	fun4(*p);
	cout<<"*p = "<<*p<<",tmp = "<<tmp<<endl;//*p = 4,tmp = 4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值