有关this指针的一道面试题(C++)

C++中this指针的特性及其在成员函数中的作用,
文章探讨了C++中非静态成员函数的this指针,包括其类型、使用限制、在函数内部的作用以及它是如何作为隐含形参由编译器自动传递的。通过两个代码示例展示了不同情况下函数执行的结果。
// 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
class A
{
比特就业课
8.3. C语言和C++实现Stack的对比
1. C语言实现
public:
 void Print()
 {
 cout << "Print()" << endl;
 }
private:
 int _a;
};
int main()
{
 A* p = nullptr;
 p->Print();
 return 0;
}

答案是C

// 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
class A
{ 
public:
    void PrintA() 
   {
        cout<<_a<<endl;
   }
private:
 int _a;
};
int main()
{
    A* p = nullptr;
    p->PrintA();
    return 0;
}

答案是B

你猜对了吗?

C++编译器给每个非静态的成员函数增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成
  • this指针的特性
    1. this指针的类型:类类型*,即成员函数中,不能给this指针赋值。
    2. 只能在成员函数的内部使用
    3. this指针本质上是成员函数的形参,当对象调用成员函数时,将对象地址作为实参传递给
    this形参。所以对象中不存储this指针
    4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传
    递,不需要用户传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值