取地址运算符 &
& 是一元运算符,返回操作数的内存地址。例如,如果 var 是一个整型变量,则 &var 是它的地址。该运算符与其他一元运算符具有相同的优先级,在运算时它是从右向左顺序进行的。
您可以把 & 运算符读作"取地址运算符",这意味着,&var 读作"var 的地址"。
间接寻址运算符 *
第二个运算符是间接寻址运算符 ,它是 & 运算符的补充。 是一元运算符,返回操作数所指定地址的变量的值。
解引用: 操作指针指向内存空间 取值
- 空指针:指向内存空间中编号为0的空间 用于初始化指针变量 空指针指向的内存是不可以访问的
int * p =NULL;
- 野指针:指针变量指向非法的内存空间
int * p = (int *)0x1100; //野指针 不能访问
const修饰指针
-
const修饰指针 ---- 常量指针(指向常量的指针) (底层const)
指针指向可以更改,指针指向的内容不可以更改
声明时,const int 和 int const 是等价的
const int * p1 = &a; //底层const
-
const修饰常量 ---- 指针常量 (顶层const)
指针指向不可以更改,指针指向的值可以更改
(引用实现一个指针常量,所以引用不能重绑定 声明引用的const都是底层const)
int * const p2 = &a; //顶层const
-
const既修饰指针,又修饰常量
指针指向和值都不能更改
const int * const p3 = &a; //靠右的是顶层const 靠左的是底层const
this指针
this指针指向当前对象的实例
每一个对象都能通过this指针访问自己的地址
this是一个隐藏的指针,可以在类的成员函数中使用,它可以用来指向调用对象。
当一个对象的成员函数被调用时,编译器会隐式地传递该对象的地址作为 this 指针。
友元函数没有 this 指针,因为友元不是类的成员,只有成员函数才有 this 指针。
class Person
{
public:
Person(int age)
{
//1、当形参和成员变量同名时,可用this指针来区分
this->age = age;
}
Person& PersonAddPerson(Person p)
{
this->age += p.age;
//返回对象本身
return *this;
}
int age;
};
void test01()
{
Person p1(10);
cout << "p1.age = " << p1.age << endl;
Person p2(10);
p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);
cout << "p2.age = " << p2.age << endl;
}
int main() {
test01();
system("pause");
return 0;
}