指针与引用,取地址符&与解引用符*
引言
探讨一下指针、引用、以及具有两种意思两个符号&和*
引用
引用相当于为对象取一个别名,引用本身不是对象。定义方式:
int x=4;
int &y=x;//y为变量x的引用,变量x有了另外一个名字y,可以通过y来间接访问x
指针
指针也可以实现对对象的间接访问,指针与引用有以下区别:
- 指针本身就是对象
- 指针无需在定义时赋初值
1.使用指针获取对象的地址
int i=12;
int *p=&i;//指针p指向i,p的值为i的地址
2.使用指针间接访问
int i=12;
int *p=&i;//&为取地址符
cout<<*p<<endl;//这里*是解引用符
示例
通过下面的实例来理解指针与引用的区别,取地址符&和引用的定义&,
指针的定义*与解引用符*。
#include <iostream>
using namespace std;
int main(){
//整型变量x
int x=12;
//x的引用y
int &y=x;
cout<<"x="<<x<<" "<<"y="<<y<<endl;
//x=12 y=12
y++;
cout<<"x="<<x<<" "<<"y="<<y<<endl;
//x=13 y=13
//指向整型变量的指针p
int *p;
//p的值为x的地址
p=&x;//这里&为取地址符
cout<<"x="<<x<<" "<<"y="<<y<<" "<<"p="<<p<<endl;
//x=13 y=13 p=0x68fedc
//地址p所指向的值变为10
*p=10;//这里为解引用符
cout<<"x="<<x<<" "<<"y="<<y<<" "<<"p="<<p<<endl;
//x=10 y=10 p=0x68fedc
//p所指对象的引用为z
int &z=*p;
z=14;
cout<<"x="<<x<<" "<<"y="<<y<<" "<<"z="<<z<<" "<<"p="<<p<<endl;
//x=14 y=14 z=14 p=0x68fedc
//整型变量i
int i=12;
//指针q
int *q;
//指针q的引用r
int *&r=q;
//r指向i,也即q指向i
r=&i;
cout<<"i="<<i<<" "<<"q="<<q<<" "<<"r="<<r<<" "<<endl;
//i=12 q=0x68fed8 r=0x68fed8
//改变r指向的值
*r=10;
cout<<"i="<<i<<" "<<"q="<<q<<" "<<"r="<<r<<" "<<endl;
//i=10 q=0x68fed8 r=0x68fed8
return 0;
}