1. 指针
C++中的指针非常好理解,只要记住以下三条就行:
- 指针变量也是一种变量类型,就像整形变量int一样;
- 指针就是地址,一说到指针的值就是地址,赋值的时候也要把变量的地址赋值给指针变量;
- 可以通过指针访问变量
举个例子:
#include <iostream>
using namespace std;
int main(){
int r = 5;
int *p = &r;
cout << "r:" << r << endl;
cout << "p:" << p << endl;
cout << "*p:" << *p << endl;
cout << "&p:" << &p << endl;
return 0;
}
// r:5
// p:0x7ffee07c15a8
// *p:5
// &p:0x7ffee07c15a0
在main
函数中定义一个整形类型的局部变量r
的值为5,声明一个引用类型的引用变量p
,并把r
的地址赋值给p
,代码编译之后运行的结果如上面注释的。
如下图所画:
在编译之后,5存放到栈中,变量名r
是保留的,只是为了编码方便给人看的。当真正编译后,所有的r
都会被替换为地址0x7ffee07c15a8
的。第二步定义了int*
整型引用变量p
,引用就是地址,所以赋值的时候要取变量r
的地址,用取址符&
。其实&r = 0x7ffee07c15a8
,这样p
就把r的地址存放起来了。但是p
是在新的空间中存放r
的地址的,那它的地址是多少呢,也同样用取址符&p = 0x7ffee07c15a0
。
怎么获取p
代表的值到底是多少呢?也是用“取值”符,获取引用变量p指向的变量的值*p = 5
。
2. 引用
变量名可以看作变量5的一个标签,变量的引用可以看作是第二个标签。所以引用变量和变量的地址是相同的。