局部变量、引用、指针、static、深拷贝、浅拷贝

1.局部变量、全局变量、静态局部变量、静态全局变量

『局部变量』:定义在函数内部,只有在函数内部才有效;特点:进来创建,出去销毁;
『静态局部变量』:定义在函数内部,只有在函数内部才有效;但是只会在开始分配一次内存,不会消失;特点:进来创建,一直保留;
『全局变量』:定义在所有函数之外,整个工程都可以使用;其他文件使用要加 extern 关键字;且需要注意,改动一处全局变量的值会影响所有相同全局变量;特点:开始创建,一直保留;
『静态全局变量』:定义在所有函数之外,和全局变量一样,但是只有定义的文件才能使用;特点:开始创建,一直保留,自己可用;

  局部变量局部静态变量全局变量全局静态变量
作用域局部局部全局全局
内存空间静态存储区静态存储区静态存储区
生命期临时长期长期长期
总结特点临时创建,出去销毁。临时创建,一直保留。开始创建,一直保留。开始创建,一直保留,自己可用。

2.引用和指针的区别

指针和引用都是通过地址索引数据的。 
指针存放的是变量的地址,引用是变量的别名。 
指针也是一个变量需要占用4个字节(32位机器)的内存空间,引用不需要占用内存,它只是变量的一个别名。
引用必须被初始化,但是不分配存储空间。
指针不声明时初始化,在初始化的时候需要分配存储空间。
引用初始化以后不能被改变,指针可以改变所指的对象。
不存在指向空值的引用,但是存在指向空值的指针

3.static关键字作用

static 关键字最基本的用法是:

1、被 static 修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要 new 出一个类来
2、被 static 修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要 new 出一个类来
被 static 修饰的变量、被 static 修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变、处处变。

在 C++ 中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。

4.深拷贝与浅拷贝区别

深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在栈中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。

图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值