• this指针和相关的用处——C++


    this的特性:
    1. this指针的类型: 类类型* const ,即可以改变指针指向对象里面的内容,但不能改变指针的指向
    2. 只能在“成员函数”的内部使用
    3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针当调用成员函数的时候,this指针会存在于栈帧中
    4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递(看不见,但是有这个形参,用户可以使用

    在成员函数中隐含的this指针就如下图,使用对象内部的成员变量或成员函数会默认用this指向,表明该成员变量或成员函数属于该对象的内部成员
    在这里插入图片描述


    面试题:

    1. this指针存在哪里?
      没有调用成员函数的时候this指针是不存在的,当调用成员函数的时候,建立成员函数的栈帧,类对象的地址作为实参传递给this形参,该形参就在栈帧中,一般通过ecx寄存器自动传递
    2. this指针可以为空吗?
    // 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
    class A
    {
       
    public:
    	void Print()
     	{
       
     		cout << "Print()" << endl;
     	}
    private:
     	int _a;
    };
    int main()
    {
       
    	A* p = nullptr;
    	p->Print();
    	return 0;
    }
    
    // 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
    class A
    {
        
    public:
        void PrintA() 
        {
       
        	cout<<_a<<endl;
        }
    private:
    	int _a;
    };
    int main()
    {
       
        A* p = nullptr;
        p->PrintA();
        return 0;
    }
    

    所以空指针也是可以作为实参传递给形参this的,运行的结果具体看里面函数的实现


    比较C语言和C++实现Stack的不同

    C语言下的Stack

    typedef int DataType;
    typedef struct Stack
    {
       
    	DataType* array;
    	int capacity;
    	int size;
    }Stack;
    
    void StackInit(Stack* ps)
    {
       
    	assert(ps);
    	ps->array = (DataType*)malloc(sizeof(DataType) * 3);
    	if (NULL == ps->array)
    	{
       
    		assert
  • 相关阅读:
    荣耀的野望:智慧世界的“高端平民”
    Linux系统故障排查和修复技巧
    React 从入门到精通——本文来自AI创作助手
    Web1.0、Web2.0 和 Web3.0 的区别
    实验室LIMS系统能带来什么好处?
    还在为数据库事务一致性检测而苦恼?让Elle帮帮你,以TDSQL为例我们测测 | DB·洞见#7
    使用SIMD指令加速计算
    尚硅谷Vue系列教程学习笔记(8)
    面向对象——实现类的基本操作
    开发工具收录
  • 原文地址:https://blog.csdn.net/iqrmshrt/article/details/127100977