C++指针

本文详细介绍了C++中的取地址运算符(&)、间接寻址运算符(*)以及const修饰指针的用法,包括空指针、野指针的区别,以及this指针在类成员函数中的作用。
摘要由CSDN通过智能技术生成

取地址运算符 &

& 是一元运算符,返回操作数的内存地址。例如,如果 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;
}
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值