指针和引用:
引用是一个对象的别名,没有分配内存,但指针有内存;引用必须初始化,与对象绑定,但指针可以不初始化;引用初始化后不能改变与其绑定的对象,但指针可以指向新的地址。
int a,b,*p,&r=a;//正确
r=3;//正确:等价于a=3
int &rr;//出错:引用必须初始化
p=&a;//正确:p中存储a的地址,即p指向a
*p=4;//正确:p中存的是a的地址,对a所对应的存储空间存入值4
p=&b//正确:p可以多次赋值,p存储b的地址
作者:xmqv
链接:https://www.zhihu.com/question/37608201/answer/72766337
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
const对象必须初始化,且不能改变其值
int a = 10;
const int *p;//对象为*p,*p的值不能改变,但p的值可以改变
p = &a;
*p = 3; // 错误,通过此指针改变指向的值
int b = 5;
p = &b; // 正确
int c = 10;
int * const p = &c;//对象为p,p必须初始化,且p不能改变
*p = 5; // 正确
int d = 5;
p = &d; // 错误,指针变量不能改变
this指针:实例化一个对象后产生的,指向对象本身;是成员函数的一个参数,将对象的地址传递给了成员函数。
只能在成员函数中使用,不能在全局函数、静态函数中使用this。对于成员函数默认的第一个参数为T* const this,如:
class A
{
public:
int func(int p);//对编译器来说,相当于int func(A* const this, int p)
};
this指针生命周期与函数的参数一样,从成员函数的开始构造,成员函数的结束清除。
this指针可能因编译器的不同存放在不同的位置。
类在实例化时,值分配类中的变量空间,并没有为函数分配空间,只有包含虚函数的类,才会有虚指针指向虚表。