指針與引用,取地址符&與解引用符*
引言
探討一下指針、引用、以及具有兩種意思兩個符號&和*
引用
引用相當於爲對象取一個別名,引用本身不是對象。定義方式:
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;
}