首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++】C++ 引用详解 ③ ( 函数返回值不能是 “ 局部变量 “ 的引用或指针 | 函数内的 “ 局部变量 “ 的引用或指针做函数返回值无意义 )

一、函数返回值不能是 " 局部变量 " 的引用或指针 1、引用通常做右值 之前使用 引用 时 , 都是作为 右值 使用 , 引用只在 声明 的 同时 进行初始化时 , 才作为左值 , // 定义变量 a...int 为 0 就是成功 , int 为其它数值 , 就是错误码 ; 3、函数内的 " 局部变量 " 的引用或指针做函数返回值无意义 如果 想要 使用 引用 或 指针 作 函数的计算结果 , 一般都是将...如果 是 外部的 main 函数中的 变量 的 地址 / 引用 , 那么 肯定是从 参数中 传入的 , 那么这个 地址 / 引用 就不需要返回 , 函数内部修改 , 直接体现在了外部的变量中 ; 因此..., 返回 局部变量 的 地址 / 引用 是无意义的 , 一般 函数 只 返回一个 int 值 , 表示 该函数 是否执行成功 , 如果执行失败 , 返回错误码 ( 在哪一步执行失败 ) ; ----..., 该 指针 是 局部变量 的指针 ; 上述两个函数是无意义的 , 获取到 函数 返回的 " 局部变量 " 的 引用 或 指针 , 然后获取地址 , 发现获取的都是随机值 , 都是无意义的值 ; num21

60420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java知识面试题复习(三)Java面向对象

    一个对象引用可以指向0个或1个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有n个引用指向它(可以用n条绳子系住一个气球) 变量与方法 成员变量与局部变量的区别有哪些 变量:在程序执行的过程中...从本质上讲,变量其实是内存中的一小块区域 成员变量:方法外部,类内部定义的变量 局部变量:类的方法中的变量。 成员变量和局部变量的区别 作用域 成员变量:针对整个类有效。...局部变量:只在某个范围内有效。(一般指的就是方法,语句体内) 存储位置 成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。...局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final? 局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final呢?它内部原理是什么呢?...是因为生命周期不一致, 局部变量直接存储在栈中,当方法执行结束后,非final的局部变量就被销毁。而局部内部类对局部变量的引用依然存在,如果局部内部类要调用局部变量时,就会出错。

    38230

    Android内存泄漏分享

    Java判断对象是否不再使用有多种策略,最终都是和对象的引用相关。 如果对象的引用数量为0,那么它显然是垃圾对象。 此外,Java使用“根对象可达性”来判定对象是否有效。...及时释放引用 能使用局部变量的,就不要使用字段。方法中,释放那些不使用又继续占有的对象引用。 四大组件对象不是由我们new的,有其明确的生命周期,在“销毁”动作时从对象引用层面释放该释放的。...内部类 优先使用静态内部类。 匿名内部类总是默认持有外部类对象的引用。 在保证速度的前提下使用文件缓存 一些情况下甚至是必须的,如登录状态。...如果必须用到Activity的情况,记得它和匿名内部类是一样的,不要在三番五次的参数传递之后,忘记释放。...类变量如果是内部类这样的拥有对外部类的引用: 记得释放类变量,或者换用静态内部类,普通类,然后提供对外部类引用的设置和解除。 总而言之:对象是有生命周期的,需要在合适的时间释放对象的强引用。

    1.2K60

    Java8新特性第1章(Lambda表达式)

    ,因为: 语法冗余; 匿名内部类中的this指针和变量容易产生误解; 无法捕获非final局部变量; 非静态内部类默认持有外部类的引用,部分情况下会导致外部类无法被GC回收,导致内存泄露。...内部类通过继承得到的成员变量(包括来说object的)可能会把外部类的成员变量覆盖掉,未做限制的this引用会指向内部类自己而非外部类。...四、变量捕获 在Java7中,编译器对内部类中引用的外部变量(即捕获的变量)要求非常严格:如果捕获的变量没有被声明为final就会产生一个编译错误。...但是在Java8中放宽了这一限制--对于lambda表达式和内部类,允许在其中捕获那些符合有效只读的局部变量(如果一个局部变量在初始化后从未被修改过,那么它就是有效只读)。...this对未限定字段的引用和未限定方法的调用本质上都属于使用final局部变量。

    1.4K90

    Variable used in lambda expression should be final or effectively final

    意思 : ambda表达式中使用的变量应该是final或者有效的final,也就是说,lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量...在 Java 8 之前,匿名类中如果要访问局部变量的话,那个局部变量必须显式的声明为 final,如下代码在 Java 7 中是编译不过的 但是finalI并没有声明为final类型,然而代码却能够编译通过...java 中局部内部类和匿名内部类访问的局部变量必须由 final 修饰,以保证内部类和外部类的数据一致性。...可以在匿名内部类中直接使用非 final 变量,而 final 修饰的局部变量不能在被重新赋值  也就是说从 Java 8 开始,它不要求程序员必须将访问的局部变量显式的声明为 final 的。...总结一下,规则没有改变,Lambda 表达式和匿名内部类访问的局部变量必须是 final 的,只是不需要程序员显式的声明变量为 final 的,从而节省时间。

    65950

    这一篇让你彻底搞懂 JAVA内部类

    局部内部类与成员内部类不同之处是他可以引用成员变量,但该成员必须声明为 final,并内部不允许修改该变量的值。...匿名内部类必须继承一个抽象类或者实现一个接口 匿名内部类中不能存在任何静态成员或方法 匿名内部类是没有构造方法的,因为它没有类名。 与局部内部相同匿名内部类也可以引用局部变量。...final 修饰呢 ** 原因是:** 因为局部变量和匿名内部类的生命周期不同。...匿名内部类是创建后是存储在堆中的,而方法中的局部变量是存储在 Java 栈中,当方法执行完毕后,就进行退栈,同时局部变量也会消失。...如果局部变量中的 a 不停的在变化。那么岂不是也要让备份的 a 变量无时无刻的变化。为了保持局部变量与匿名内部类中备份域保持一致。编译器不得不规定死这些局部域必须是常量,一旦赋值不能再发生变化了。

    24120

    java(4)-深入理解java嵌套类、内部类以及内部类builder构建构造函数六、使用 builder 模式解决构造方法参数过多的情况

    若想访问外部类的变量,必须通过其它方法解决,由于这个原因,静态嵌套类使用很少。...同时注意,内部静态类Person只在类StaticTest 范围内可见,若在其它类中引用或初始化,均是错误的。...同时,内部类的变量成员只在内部内内部可见,若外部类或同层次的内部类需要访问,需采用示例程序中的方法,不可直接访问内部类的变量。 四、方法内部类  顾名思义,把类放在方法内。...B、方法内部类对象不能使用该内部类所在方法的非final局部变量。 因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。...但是该方法结束之后, 在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。

    1.6K10

    Java匹马行天下之JavaSE核心技术——面向对象

    不必在声明语句中赋值; 当执行局部变量所在的方法或代码块时,才有机会被创建,在方法或代码块执行结束后被自动销毁; 局部变量在内存的栈区分配; 局部变量在使用之前必须要先赋值; 静态变量(类的变量)...final修饰变量: final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。...父类引用指向子类对象、匿名内部类; 子类必须重写抽象父类的所有抽象方法,或者是把子类也定义为抽象类; 如果一个类继承的抽象父类还有上级抽象父类,那么子类中需要要重写所有抽象父类的所有抽象方法; 抽象类也可以继承非抽象类...4、关键字 this指当前对象,用法: 当局部变量名和实例变量名同名时,使用this.变量名来表示实例变量; this()表示当前类的构造方法,只能在构造方法中使用该写法,并且是写在构造方法内的第一行...声明在方法体或代码块内,作用域范围在方法体或代码块内。

    47630

    Java匹马行天下之JavaSE核心技术——面向对象

    ; 实例变量是在对象被创建时创建,对象被销毁时销毁; 作用域范围在整个类中; 局部变量 声明在构造方法、静态方法、实例方法、代码块中的变量,都是局部变量; 不能使用...static和访问修饰符修饰; 可以使用final修饰,即为常量,不必在声明语句中赋值; 当执行局部变量所在的方法或代码块时,才有机会被创建,在方法或代码块执行结束后被自动销毁; 局部变量在内存的栈区分配...; 抽象类可以被继承; 可以通过两种方式获得抽象类对象:父类引用指向子类对象、匿名内部类; 子类必须重写抽象父类的所有抽象方法,或者是把子类也定义为抽象类; 如果一个类继承的抽象父类还有上级抽象父类...(o.b); } } } 局部内部类 声明在方法体或代码块内,作用域范围在方法体或代码块内。...(); }    匿名内部类 声明位置同局部内部类一样,前提条件:必须继承一个类或实现一个接口,匿名内部类的声明和实例化对象是同时进行的; 一般使用于获得抽象类或接口对象; 语法: 父类名

    80930

    记录一下编译器怎么老提示我改代码

    前言 起因是每次在子线程调用局部变量时编译器爆红,要求参数改为final数组类型,今天心血来潮特地研究一下为什么必须得用final修饰。...一个常见的问题 当我们在子线程调用局部变量时编译器就会提醒我们 变量 'test' 在内部类中被访问,需要被声明为 final 或者是事实上的不可变。...总结 在之前的Java版本中,当局部变量被匿名内部类引用时,编译器要求该变量为 final 或隐式的 final。...这是因为匿名内部类(子线程也算一种匿名内部类)可能会在外部方法执行完毕后继续存在,而局部变量的生命周期通常在方法执行完毕后结束。这可能导致匿名内部类访问无效的变量。...为了解决这个问题,编译器要求变量为 final,这样在匿名内部类中会创建一个拷贝作为成员变量,确保变量的有效性。这样做的好处是,即使局部变量已经消失,匿名内部类仍然可以使用这个不变的成员变量。

    13810

    Java程序员必备基础:内部类解析

    匿名内部类不能定义任何静态成员和静态方法。 当所在的方法的形参需要被匿名内部类使用时,必须声明为 final。 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。...局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final? 局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final呢?它内部原理是什么呢?...是因为生命周期不一致, 局部变量直接存储在栈中,当方法执行结束后,非final的局部变量就被销毁。而局部内部类对局部变量的引用依然存在,如果局部内部类要调用局部变量时,就会出错。...我们看到匿名内部类Outer$1Inner的构造器含有两个参数,一个是指向外部类对象的引用,一个是int型变量,很显然,这里是将变量innerMethod方法中的形参a以参数的形式传进来对匿名内部类中的拷贝...注意: 在Java8 中,被局部内部类引用的局部变量,默认添加final,所以不需要添加final关键词。 五、内部类的应用场景。 一般我们在哪些场景下使用内部类呢?

    1K10

    【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day09

    如果 final 修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值。 (2)修饰局部变量 系统不会为局部变量进行初始化,局部变量必须由程序员显示初始化。...但是引用的值是可变 的。 为什么局部内部类和匿名内部类只能访问局部final变量?...这里就会产生问题:当外部类的方法结束时,局部变量就会被销毁了,但是内部类对象可能还存在 ( 只有没有人再引用它时,才会死亡) 。这里就出现了一个矛盾:内部类对象访问了一个不存在的变 量。...为了解决这个问题,就将局部变量复制了一份作为内部类的成员变量,这样当局部变量死亡 后,内部类仍可以访问它,实际访问的是局部变量的"copy" 。...这样就好像延长了局部变量的生命周 期将局部变量复制为内部类的成员变量时,必须保证这两个变量是一样的,也就是如果我们在内部 类中修改了成员变量,方法中的局部变量也得跟着改变,怎么解决问题呢?

    29130

    Oracle Java类和对象

    类的实例获得每个实例变量的自己副本,必须通过实例引用访问该副本。 使用new运算符和构造函数从类创建对象。新运算符返回对已创建对象的引用。您可以将引用分配给变量或直接使用它。...此外,局部类可以访问局部变量。然而,局部类只能访问声明为final的局部变量。当局部类访问封闭块的局部变量或参数时,它会捕获该变量或参数。...然而,从JavaSE8开始,本地类可以访问封闭块的最终或有效最终的本地变量和参数。一个变量或参数,其值在初始化后从未改变,实际上是最终的。...因此,Java编译器会生成类似于“从内部类引用的本地变量必须是最终的或有效的最终的”的错误消息,其中内部类PhoneNumber尝试访问numberLength变量: if (currentNumber.length...x是指成员变量FirstLevel.x。 然而,与本地类和匿名类一样,lambda表达式只能访问封闭块的最终或有效最终的局部变量和参数。在本例中,变量z实际上是final;其值在初始化后从未更改。

    89200

    Java面向对象问题汇总

    1.3、多态 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法...,从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。...匿名内部类: 定义匿名内部类的前提是,内部类必须要继承一个类或者实现接口,格式为 new 父类或者接口(){定义子类的内容(如函数等)}。也就是说,匿名内部类最终提供给我们的是一个匿名子类的对象。...内部类作用主要实现功能的隐藏、减少内存开销,提高程序的运行速度。 3.5、为什么内部类调用的局部变量必须是final修饰的?...3.6、局部变量对垃圾回收机制有什么样的影响? 局部变量表中的变量是很重要的垃圾回收根节点,被局部变量表中变量直接或者间接引用的对象都不会被回收。

    38030

    一文读懂面向对象(OOP)

    修饰成员变量 如果final修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值。 修饰局部变量 系统不会为局部变量进行初始化,局部变量必须由程序显示初始化。...这里就会产生问题:当外部类的方法结束时,局部变量就会销毁了,但内部类对象可能还存在(只有没有其他地方在引用它时,才会死亡)。这里就出现了一个矛盾:内部类对象访问了一个不存在的变量。...为了解决这个问题,就将局部变量复制了一份作为内部类的成员变量,这样当局部变量死亡后,内部类仍可以访问它,实际访问的是局部变量的"copy"。这样就好像延长了局部变量的生命周期。...将局部变量复制为内部类的成员变量时,必须保证这两个变量是一样的,也就是如果我们在内部类中修改了成员变量,方法中的局部变量也得跟着改变,怎么解决呢?...; 此方法会在输出变量时,或引用变量进行拼接时默认调用,而查看地址信息,通常没有必要,我们通常要查看的是对象的成员变量信息, 因此我们需要重写toString()方法,用于查看对象的详情。

    78220

    带你彻底掌握 Lambda 表达式(下)

    以上报错,就涉及到外部变量在 Labmda 表达式中的作用域,且有以下几个语法规则。 6.1 变量作用域的规则 规则 1:局部变量不可变,域变量或静态变量是可变的 何为局部变量?...局部变量是指在我们普通的方法内部,且在 Lambda 表达式外部声明的变量。 在 Lambda 表达式内使用局部变量时,该局部变量必须是不可变的。...不管是 Lambda 表达式,还是匿名内部类,编译器都要求了变量必须是 final 类型的,即使不显式声明,也要确保没有修改。...小结: 前面我们列举了多个局部变量必须为 final 或 effectively final 的原因,而 Lambda 表达式并没有对实例变量或静态变量做任何约束。...对于 Lambda 表达式,在一定条件下可替换匿名内部类,但都是要求引入的外部变量必须是 final 的,前面也解释了为何变量必须是 final 的。

    52320

    java编程基础(入门级)(超级完整版)「建议收藏」

    a : b; 错误写法 03方法(基础) 1.概念 将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个功能。需要使用功能的时候可以调用。...局部变量:方法中的参数或{}中的内部变量 作用域:一旦超出作用域,立刻从栈中消失 【2】堆(heap):凡是new出来的东西都在堆中 堆内存里的东西都有一个地址:16进制 堆内存里面的数据,...4】使用构造方法赋值时,必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值 12四种权限修饰符 & 内部类 1.四种权限修饰符         public > protected...局部内部类名称 { // ... } } } 【4】final问题 局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】 原因:...从java8开始,只要局部变量事实不变,那么final关键字可以省略 5.权限修饰符规则 【1】外部类:public/(default) 【2】成员内部类:都可以 【3】局部内部类:什么都不能写,和

    1K40

    JAVA 1-6章测试题

    答:局部变量与成员变量的区别: 1>局部变量是定义在类中的方法体中,而成员变量是定义在类中方法体外的; 2>局部变量只能在所定义的方法体中或者代码块中使用,而成员变量在本类中都可以使用。...2>Super:如果父类中没有提供无参数的构造方法,那么,我们必须通过super语句指导子类调用父类中的其他构造方法; 3>当子类中的局部变量或成员变量与父类中的成员变量同名时,通过super访问父类的成员变量...1>方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。 2>方法内部类对象不能使用该内部类所在方法的非final局部变量。...因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!...例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。 45、final修饰的方法能不能被继承?

    84930

    Java基础知识面试题(2020最新版)

    内部类的分类有哪些静态内部类成员内部类局部内部类匿名内部类      内部类的优点内部类有哪些应用场景局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?...一个对象引用可以指向0个或1个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有n个引用指向它(可以用n条绳子系住一个气球)  变量与方法  成员变量与局部变量的区别有哪些  变量:在程序执行的过程中...从本质上讲,变量其实是内存中的一小块区域  成员变量:方法外部,类内部定义的变量  局部变量:类的方法中的变量。  成员变量和局部变量的区别  作用域  成员变量:针对整个类有效。...局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?  局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final呢?它内部原理是什么呢? ...是因为生命周期不一致, 局部变量直接存储在栈中,当方法执行结束后,非final的局部变量就被销毁。而局部内部类对局部变量的引用依然存在,如果局部内部类要调用局部变量时,就会出错。

    45931
    领券