精华内容
下载资源
问答
  • c语言局部变量默认初始 万次阅读 多人点赞
    2018-04-09 15:29:48

    C语言中,定义局部变量时如果未初始化,则值是随机的,这是为什么呢?

    定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的。

    c语言中只有局部变量在未赋初值时,才是随机数,全局变量和静态变量未赋初值时编译器会自动将其初始化为0。局部变量是分配在堆栈上的,而全局变量和静态变量是分配在数据段中的。这个跟程序的内存分配是有关系的。

    更多相关内容
  • 字节码指令`iload_2`的意思是拿出局部变量表中位置2的变量,应该是拿出来吧,可是这个值局部变量表并没有存啊… 经过百度,我自己对这两个问题的理解: 1. 局部变量表的长度在编译期时就确定,那是不是方法...
  • python中局部变量使用

    千次阅读 2020-09-06 13:29:15
    python中局部变量使用 1、代码 name="black" def change_name(): name="姑娘" print("在",name,"里面....",id(name)) def func2(): name="rain" func2() change_name() print(name,id(name)) 2、运行截图 3...

    python中局部变量使用

    1、代码

    name="black"
    
    def change_name():
        name="姑娘"
        print("在",name,"里面....",id(name))
    
    def func2():
        name="rain"
    
    func2()
    
    change_name()
    print(name,id(name))
    

    2、运行截图

    在这里插入图片描述

    3、局部变量的说明

    【1】定义在局部的变量只能在局部使用,使用完了以后自己会释放内存空间。
    【2】定义在函数外部的一级代码的变量,叫做全局变量,全局都能用。
    【3】在函数的内部是可以引用全局变量,如果全局和局部都有一个name,那么函数会先从函数的内部寻找name,然后才到外面查找。
    【4】不同的函数里面的局部变量是互不干扰的,不可以调用对方的局部变量。

    展开全文
  • 在Android Studio中下断点调试时,可以在“Watches”窗口中查看变量的。... 图1 无法显示局部变量的值可以通过修改gradle文件来实现显示局部变量值的功能。1 gradle文件简介Android Studio采用G...

    Android Studio中下断点调试时,可以在“Watches”窗口中查看变量的。但是当要查看的变量是局部变量时,

    String path = getFilesDir().toString();

    Watches”窗口中无法查看path的值,如图1所示。

     

    1 无法显示局部变量的值

    可以通过修改gradle文件来实现显示局部变量值的功能。

    1 gradle文件简介

    Android Studio采用Gradle来构建项目的。一般的项目中包含2build.gradle文件,一个在最完全的目录下,另一个在app目录下,如图2所示。

     

    2 build.gradle文件

    2 修改gradle文件

    双击在app目录下的build.gradle文件,找到“buildTypes”代码段。该代码段指定了使用不同类型的编译方式时的配置情况。其中“release”代码段指定了使用release方式编译程序时的配置情况。

    buildTypes”代码段中添加使用debug方式编译程序时的配置情况,代码如下所示。

    debug {
        testCoverageEnabled false
    }

    testCoverageEnable表示是否生成代码覆盖率报告,false表示不生成。

    之后,重新调试程序,在Watches”窗口中就可以显示局部变量path的值了,如图3所示。

     

    3 局部变量path的值

    需要注意的是,如果使用以上方法仍无法显示path的值,可以将安卓系统中的要调试的程序删除,之后重新debug即可。

    展开全文
  • 前几天,有个大佬考了我一个问题:什么类的成员变量不需要指定就可以自动赋予初始,而方法内的局部变量就必须指定初始呢?说实话,这个问题确实难倒我了,之后我在网上一顿操作,终于把这个问题弄得稍微明白...

    【套装4本】java编程思想4第4版+

    402.5元

    包邮

    (需用券)

    去购买 >

    f22ce081e36827da908204eacd0e31c8.png

    前几天,有个大佬考了我一个问题:为什么类的成员变量不需要指定值就可以自动赋予初始值,而方法内的局部变量就必须指定初始值呢?

    说实话,这个问题确实难倒我了,之后我在网上一顿操作,终于把这个问题弄得稍微明白一点了。

    首先我给出一个具体的场景来说明这个事情:

    bVbEQrW

    定义一个Cat类,里面有各种属性,包括8大基本数据类型和String类型,我们把String类视为复杂数据类型。Cat类里面有一个setAge方法。我们在main方法里面给tom这个Cat赋值年龄,结果发现,如果给定的年龄没有赋初始值,编译器会报错:

    bVbEQss

    那我们来看下未给Cat里面的各种属性初始化,各项属性的初始值究竟是怎样的:

    重写一下toString方法:

    bVbEQtd

    然后输出结果为:

    bVbEQtu

    我们能够看到,对于8大基本类型的初始化已经实现了,分别是如图所示的值。对于复杂的类,会赋予null作为默认值。(这里char的默认值为'/u0000'也就是null)

    那么问题来了,为什么Java会有这样的操作呢,为什么不能将方法内的局部变量也自动赋值一个默认值呢?

    首先,我在网上找到了这样的一个答案如下,如果不想看原文,可以直接跳过至引用答案的结尾处直接看我的总结:

    这位作者在读《深入理解Java虚拟机》的时候记录了一个相关知识点。

    类的成员变量有默认初始值,而方法内的局部变量却没有初始值。这个问题涉及到JVM类加载和字节码执行两个阶段,这两个阶段是依次执行的。

    JVM类加载是JVM利用类加载器将class文件加载到JVM的过程,涉及“加载”、“验证”、“”准备“、“”解析“和”初始化“。

    一、类的成员变量初始化   ---在JVM类加载阶段完成

    类的成员变量又分为静态成员变量和非静态成员变量。

    静态成员变量

    静态成员变量会被初始化两次,第一次在“准备”阶段,先进行一次初始化,系统附上默认值;第二次在“初始化”阶段,根据代码中的赋值情况再进行一次初始化。

    例如:

    public static int i =3 ;

    第一次初始化后i的值为0,第二次初始化后,值才为3.

    数据最终存放在方法区中。

    非静态成员变量

    仅“初始化”阶段赋值。根据代码中的赋值情况,代码不赋值直接赋默认值,有赋值则等于代码中的赋值。对象实例化后,该变量随java对象分配到java堆中。

    二、方法区的局部变量没有初始化

    而方法中的局部变量没有初始化步骤,如下图:

    bVbEQtU

    需要在代码中进行初始化。

    bVbEQtV

    ————————————————

    原因就是类方法中的代码,实在字节码执行的时候,才会被运行到,此时局部变量是存储在虚拟机栈-栈帧中的局部变量表中。局部变量定义了但是没有赋值是不能使用的。

    版权声明:本文为CSDN博主「一步一台阶」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/liufang...

    这篇帖子主要是说明了两种变量在JVM编译代码的时候把他们放在了哪里。

    JVM加载类的时候,不管是静态类还是非静态类,都会给每个类分配内存,存在堆里面,都有初始化的这一步操作。

    对于方法内的局部变量,由于方法要放到堆栈中(堆栈这个词,其实意义就是栈,习惯称为堆栈,其实和堆没关系),只有字节码执行的时候才会被运行到,所以没有赋值是不能使用的。

    ………………??? 这是什么意思?也就是说,两种变量的存储位置不一样,会对是否初始化有影响,但是没有说明为什么成员变量在堆里就有初始化,方法内局部变量为啥放在堆栈里面,只有执行方法的时候才会被运行到就不能初始化呢?

    然后我就找到另一篇文章如下:

    为什么 Java 中全局变量不一定初始化,局部变量必须初始化?

    作者:Intopass

    链接:https://www.zhihu.com/questio...

    来源:知乎

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    首先 Java 语言就是这么规定的。

    然后为什么 Java 语言要这么规定呢?有什么内部机理吗?

    可能的原因如下,当我们新建一个对象时,Java会在Heap中申请一块内存区域用以存放类的数据。而成员变量就是类的数据,也是放在这块内存区域中的。只需要JVM在申请内存的时候顺便把整块区域都置为零即可完成初始化,方便快捷。

    而对于方法的局部变量,是在线程的Stack中,当然Stack他也可以帮我们初始化,不过有一个问题。对于有些局部变量,在方法的一开始是没有的,有些在循环中的局部变量是要反复的声明多次的。有些局部变量作用域结束后,另一个局部变量又会占用这个局部变量的位置。

    那么初始化要放在何时呢?当然JVM可以帮我们初始化多次,不过那样或许会带来性能问题。

    for (int i = 0; i < 10; i++) {

    int n;

    if (i % 2 == 0) {

    n = 10;

    } else {

    n = 20;

    }

    }

    像是这个n,我们完全不用JVM帮我们初始化,如果每次循环他都帮我们初始化一次,那么是没有必要的。综上所述,对于局部变量,可能不帮我们初始化是一个不错的选择。(而且JVM实现起来也更容易!!!)

    通过看这位作者的讲解,我们就能够理解得更清楚一些了。为什么堆内的成员变量可以初始化?因为容易,申请内存的时候顺便就实现了初始化。为什么栈内的局部变量不能初始化?因为麻烦,而且没有必要。

    最后,我又看到了一个内容,同知乎页面另一个匿名作者的回答:

    套用《Thinking in Java》作者Bruce Eckel的话

    编译器当然可以为局部变量附一个默认值,但是未初始化的局部变量更有可能是程序员的疏忽,所以采用默认值范围会掩盖这种失误。因此强制程序员提供一个初始值,往往能够帮助找出程序里的缺陷。

    其实我觉得这句话应该是对于为什么局部变量不能够初始化的最合理的解释了吧。

    总结一下,为什么局部变量需要手动初始化?从技术上来讲,局部变量一般来说总量大,生命周期短,JVM进行初始话开销较大;从业务上讲,局部变量一般用于实际问题下的运算,很少会用到默认值,赋值意义不大;从编程思想上讲,局部变量不初始化,而是报错提醒,更有助于程序员减少开发过程中出现缺陷的可能。一举三得,何乐而不为?

    回到开头,所以说大佬就是大佬,随随便便问一个问题,看似是一个小问题,但是深究下去竟然牵扯到这么多深层次的知识点,甚至有点哲学的意义在里面,佩服佩服!

    java 11官方入门(第8版)教材

    79.84元

    包邮

    (需用券)

    去购买 >

    f0f3f55624fb396b1764d42d6df88864.png

    展开全文
  • 在mysql变量中分为局部变量@与全局变量@@他们都不分大小并,但两种变量用法稍有区别了,下面我来介绍产的用法.共同点:不区分大小写,都是变量.不同点:全局变量是系统中只读的,可以在配置文件中进行修改.mysql变量的术语...
  • C语言局部变量默认初始

    千次阅读 2019-07-10 22:38:34
    因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,就是脏的。 c语言中只有局部变量在未赋初值时,才是随机数,全局变量和静态变量...
  • 局部变量和成员变量的初始问题

    千次阅读 2018-12-13 10:23:45
    局部变量,必须显示给予一个初始,否则编译无法通过。大家在学习的时候,一般是直接把这个结论直接记下,很少去考虑原因。 所以,这是什么呢? 比如 在局部变量中,必然是先声明一个变量,再进行赋值。于是...
  • 比如:$("#goTopBtn").click(function () { var sc = $(window).scrollTop(); $('body,html').animate({ scrollTop: 0 }, 500); }) alert(sc);外面怎么获取到sc的
  • C语言未初始化的局部变量是多少?

    千次阅读 多人点赞 2020-07-17 17:41:15
    C语言中,未初始化的局部变量到底是多少? 答案往往是: 与编译器有关。 可能但不保证初始化为0。 未确定。 总之,全部都是些一本正经的形而上答案,这很令人讨厌。 但凡一些人给你滔滔不绝地扯编译器,C库,...
  • 循环中已经给TAC 赋值,但是return 后面的TAC 报错说赋值求指教。 ![图片说明](https://img-ask.csdn.net/upload/201809/04/1536023660_120850.png)
  • 局部变量与全局变量

    千次阅读 2021-01-08 11:31:01
    局部变量只允许在其定义的函数或复合语句中使用,离开所在的函数或复合语句后该局部变量将不能使用。 main()函数中定义的变量不能在其余的函数中使用。 复合语句中定义的变量只能在该复合语句中使用 for()循环...
  • 局部变量和成员变量

    千次阅读 2020-12-16 22:39:21
    局部变量:只有在方法当中才可以使用,出了方法就不能再用了 成员变量:整个类全都可以通用 默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则...
  • Python中都全局变量和局部变量

    千次阅读 多人点赞 2020-10-31 17:14:44
    局部变量:函数体之内定义的变量 下述代码中,t是全局变量,m是局部变量 t = 1 def func(x): m = 2 return x//m 规则 1. 局部变量和全局变量是不同的变量,即使变量名相同 局部变量是函数中的占位符,与...
  • Lua全局变量与局部变量

    千次阅读 2019-04-22 16:55:52
    在lua中,局部变量(变量名前加 local)与全局变量类似于C语言中的概念: print(a) --打印变量nil a=111 --全局变量(整个lua文件中都可以使用,向下的范围) do local a=0--局部变量在语句块的结束 a=1 ...
  • 局部变量

    千次阅读 2020-09-07 12:22:00
    C语言提供了局部变量的定义,局部变量也称为:内部变量。局部变量就是定义在大括号{ }包含的代码块内,例如: if(){ } if(){ }else{} for(){ } while() { } do{ } while(); switch(){ } 还有函数的定义,例如...
  • 不进行声明而直接使用全局变量会报错(可以隐式声明),而局部变量使用后声明则不会报错,只是值为undefined。 2.全局变量跟局部变量重名时,局部变量的范围会覆盖掉全局变量的范围,当离开局部变量的范围后,又重...
  • 一全局变量和局部变量 (1)全局变量和局部变量的含义: 在函数体内部定义的变量叫做局部变量,在函数体外部定义的...3.局部变量的生命周期该变量创建到该函数体结束(生命周期:变量被创建开始到被系统回收的这一
  • 局部变量转化全局变量

    千次阅读 2018-08-15 18:44:34
    局部变量的转换 将要转换的局部变量,在该类的构造器中声明,并... //account为局部变量 private Account account; private double num; public ATMThread(Account account) { //局部变量--&gt;提升...
  • 普通局部变量与static局部变量的区别 内存分配和释放 1、普通局部变量只有执行到变量定义的语句的时候才分配空间。 2、static局部变量在编译阶段(函数还...1、普通局部变量不初始化,随机。 2、static局部变量...
  • 成员变量有默认初始,而方法内的局部变量却没有初始。这个问题涉及到JVM类加载和字节码执行两个阶段,这两个阶段是依次执行的。 JVM类加载是JVM利用类加载器将class文件加载到JVM的过程,涉及“加载”、“验证...
  • c语言中的局部变量和全局变量

    千次阅读 2021-08-05 22:52:14
    我们按照变量的作用域范围可以把变量划分为局部变量和全局变量; 局部变量 局部变量出现在三种地方: (1)在函数的开头定义的变量 (2) 在函数内的复合语句内定义的变量 (3)形式参数 在一个函数内部定义的变量只在...
  • JavaScript把局部变量变成全局变量

    千次阅读 2021-04-19 17:01:57
    文章目录函数的自调用——自调用函数使用形式注意那么如何把局部变量变成全局变量?应用案例1——将随机数对象赋给window应用案例2——产生随机位置小方块 首先我们要知道函数的自调用 函数的自调用——自调用函数 一...
  • 1、局部变量能否和全局变量重名?  答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: "  局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器...
  • 成员变量和局部变量详解

    千次阅读 多人点赞 2020-06-10 10:19:53
    文章目录1、考点:2、局部变量和成员变量的区别3、具体的测试代码4、过程分析(重点)5、补充 1、考点: 就近原则 变量的分类 成员变量:类变量、实例变量 局部变量 非静态代码块的执行:每次执行实例对象都会...
  • 静态局部变量

    千次阅读 2021-01-07 09:59:47
    函数结束时,静态局部变量不会消失,每次该函数调用时,也不会其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不其显式初始化,则C++自动其初始化为0。...
  • MySQL入门 SQL语言之十八:系统变量(全局变量、会话变量),自定义变量(用户变量、局部变量)的使用 #变量 /*系统变量: 全局变量  会话变量自定义变量: 用户变量  局部变量 */ #一、系统变量 /*说明:变量由...
  • 局部变量和全局变量

    千次阅读 2020-11-02 15:34:48
    一、定义 ... 函数外部不能使用局部变量。【例1】【例2】 2. 函数执行时,执行到创建局部变量的地方,局部变量才会创建。当函数执行完后,局部变量也就死亡了。只有在生命周期内才能使用这个变量。 ...
  • 之前在项目的存储过程中发现有通过 `DECLARE` 关键字定义的变量如`DECLARE cnt INT DEFAULT 0;`,还有形如 `@count` 这样的变量,存储过程中拿过来直接就进行设置,像这样`set @count=1;`,这两种类型的变量究竟有...
  • C#使用了未赋值的局部变量

    万次阅读 2019-10-12 14:16:24
    错误 1 使用了未赋值的局部变量

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 654,287
精华内容 261,714
关键字:

局部变量的值为使用