P15:
从内存的角度,探讨如下这三个东西
值 value本身
指针 pointer
引用 reference
指针就是一种地址的形式,地址就是一种指针的形式----------->地址、指针互通
指针-------->指向
引用——-->代表
//*靠近int可以,*靠近p也可以 int* p = &x; int *p = &x;
int* p = &x--------------------->p是一个变量,类型是pointer to int
int& r = x;
int& r = x----------------------->r是一个变量,类型是reference to int,代表
对于引用-------------------->(刻意制造出来的假象)r代表谁,那么r的大小取决于代表的谁,r的地址与代表的地址相同
//刻意制造出来的假象,大小相同,地址相同 //实际上地址不相同 //实际上引用在底层实现是指针 sizeof(r) == sizeof(x); &r == &x
因为x是0,所以r是0
r里面有一根指针指向x
引用一定要有初值,即r代表了x,从此之后r不可以代表其他的
指针可以变化,这个时刻指向a,下个时刻指向b,但是reference不可以,只可以代表初值
x、p、r都是变量,共占用了3块内存
对于指针p,输出p的地址------>cout<<p;
输出p所指东西的内容--------->cout<<*p;
cout<<p; //输出地址 cout<<*p; //输出p所指东西的内容
对于引用r,输出r的地址------------------------->cout<<&r;
输出r代表东西的内容------------>cout<<r;
cout<<&r; //输出地址 cout<<r; //输出r代表东西的内容
reference就是一个漂亮的指针
reference是用途----------->多数用在参数的传递上
声明采用了3中传递方式------------>pass by pointer pobj->XXX()
pass by value obj.XXX()
pass by reference obj.XXX()
定义变量-------------->Cls obj;
pointer func1(&obj)<------指针与地址互通
value func2(obj)
reference func3(obj)<--------传4个字节,速度快
signature不包含返回类型,但是包含参数列()后面的const