码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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
  • 相关阅读:
    强化学习------Sarsa算法
    Vue笔记3(计算属性,监视属性,绑定样式)
    一文读懂SQL中的Aggregate(聚合) 函数和Scalar(标准)函数
    CompletableFuture 实战
    【Python】基础语法(函数、列表和元组、字典、文件)
    EndNote技巧 | Bibliography的Templates修改
    什么是测试架构师(经验总结)
    LeetCode高频题:《逆水寒》在地图的制作中,美术在地图上刷一片连通区域,连通区域自动填充,请你判断给定几个点位置,他们是否属于被刷区域
    大数据专业大一学生在线提问
    [MRCTF2020]套娃 GET POST 读取字符串特性 伪造ip 伪协议伪造 file_get_contents()
  • 原文地址:https://blog.csdn.net/iqrmshrt/article/details/127100977
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号