精华内容
下载资源
问答
  • 局部变量如何初始化
    千次阅读
    2019-04-22 11:21:12

    (1)C语言从语法上规定全局变量只能用常量表达式来初始化,因此下面这种全局变量初始化是不合法的:

    int minute = 360;
    int hour = minute / 60; 
    

    虽然在编译时计算出 hour 的初始值是可能的,但是 minute / 60 不是常量表达式,不符合语法规定,所以编译器不必想办法去算这个初始值。

    (2)全局变量在定义时不初始化则初始值是0,局部变量在定义时不初始化则初始值是不确定的。
    所以,局部变量在使用之前一定要先赋值,如果基于一个不确定的值做后续计算肯定会引入Bug。

    (3)关于形参和实参
    记住这条基本原理:形参相当于函数中定义的变量,调用函数传递参数的过程相当于定义形参变量并且用实参的值来初始化

    (4)关于局部变量和临时变量
    假设写了一个如下的返回布尔值的函数

    int is _even(int x)
    {
    	if(x%2==0)
    		return 1;
    	else
    		return 0;
    }
    与之等价的,可以直接写成:
    int is even(int x)
    {
    	return !(x%2);
    }
    

    例如上面的函数调用相当于这样的过程:
    在这里插入图片描述

    参考:<Linux C 一站式编程>

    更多相关内容
  • 如果在定义变量后没有给它们赋初始值,那么java会给于一个默认的初始化值,但只有类的成员变量才被初始化,而局部变量不会被初始化。如果没有被初始化的变量被操作,java在编译器就会给予错误警告,如果没有被赋予...

    在java中变量是具有默认初始化值的。

    但这这么说也不怎么准确,因为java中的变量(我觉得称为字段更合适),分为属于类的成员变量和属于函数或者局部代码块的局部变量。如果在定义变量后没有给它们赋初始值,那么java会给于一个默认的初始化值,但只有类的成员变量才被初始化,而局部变量不会被初始化。如果没有被初始化的变量被操作,java在编译器就会给予错误警告,如果没有被赋予初值的局部变量,一直没被操作,则编译通过,java不会给予错误警告。

    除了变量的初始化外,新创建的类的引用也是一样,如果没有用new关键字给它分配对象的话,如果这个引用是属于类的成员字段则被默认初始化为null,如果在函数或者局部代码块内部,不会被初始化;

    java基本数据类型默认初始化表

    基本类型

    默认值

    char

    '\u0000'(null)

    byte

    0(byte 1字节)

    short

    0(short 2字节)

    int

    0(4字节)

    long

    0L

    float

    0.0f

    double

    o.od

    boolean

    false

    另外添加一个:类引用会被初始化为null

    下面,用一段代码测试一下:

    运行结果:

    1031ba93d18fbf68dbd8205253be730b.png

    这个结果就说明了,类测成员变量会被给予一个默认初始化值,类引用也会被初始化位nullvcD4KPHA+z8LD5rXEveG5+8rHyKW19MnPzsS0+sLr1tDK5LP2uq/K/bPJ1LGx5MG/JiMyMDU0MDu1xNPvvuSjrMbky/zDu9PQ1/a4xLavPC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20131218/20131218093053283.jpg" alt="">

    从上面的报错信息我们不难看出,包含在函数中的成员变量或者类引用,都不会被默认给予初始化值。

    思考:

    java的这种机制避免了没有被初始化的数据成员在进行其它操作时引起的严重性错误,尽量从语法上避免程序员犯错。与之相反,C和C++,无论你对变量时候进行初始化,都可以对变量进行操作,这时变量中存储的是一串随机的数字(可能是上一个程序使用该内存空间后遗留的值,计算机中的数据不会被物理意义上的“擦除”,你对一块内存的写数据只是覆盖了这块内存的旧值而已。)。java编译器会将未初始化变量视为错误,而C/C++编译器则将其视为警告

    喜欢 (0)or分享 (0)

    展开全文
  • Java中的成员变量、局部变量初始化的问题

    【1】成员变量

    • 成员变量有默认初始值,而方法内的局部变量却没有初始值。这个问题涉及到JVM 类加载和字节码执行两个阶段,这两个阶段是依次执行的。JVM类加载是JVM利用类加载器将class文件加载到JVM的过程,涉及“加载”、“验证”、“准备“、“解析“和”初始化“。

    • 类的成员变量初始化 --在JVM类加载阶段完成
      类的成员变量又分为静态成员变量和非静态成员变量。
      1、静态成员变量:静态成员变量会被初始化两次,第一次在“准备”阶段,先进行一次初始化,系统附上默认值;第二次在“初始化”阶段,根据代码中的赋值情况再进行一次初始化。
      在这里插入图片描述
      【例】
      public static int i =3 ;
      第一次初始化后i的值为0,第二次初始化后,值才为3.
      数据最终存放在方法区中。
      非静态成员变量
      仅“初始化”阶段赋值。根据代码中的赋值情况,代码不赋值直接赋默认值,有赋值则等于代码中的赋值。对象实例化后,该变量随java对象分配到java堆中。
      【2】局部变量

    • 对于局部变量要求程序员自己主动赋值
      局部变量存在于线程的Stack中,虽然Stack可以帮助我们进行初始化,但是没必要
      【注】为什么局部变量要手动初始化

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

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

    展开全文
  • 静态局部变量初始化

    千次阅读 2019-03-07 11:17:06
    原以为会每次调子函数时,都会初始化静态局部变量。实际并非如此 #include void key(void) { //static unsigned char key_up =1; unsigned char key_up =1; printf("key_up = %d \n", key_up); key_up = ...

    mask一下一直以来的一个误区

    #include <stdio.h>
    
    void key(void)
    {
    	static unsigned char key_up =1;
    	printf("key_up = %d \n", key_up);
    	key_up = 0;
    	printf("key_up = %d \n", key_up);
    }
    
    int main(void)
    {
    	key();
    	key();
    
    	return 0;
    }
    

    原以为会每次调子函数时,都会初始化静态局部变量。实际并非如此
    在这里插入图片描述

    #include <stdio.h>
    
    void key(void)
    {
    	//static unsigned char key_up =1;
    	 unsigned char key_up =1;
    	printf("key_up = %d \n", key_up);
    	key_up = 0;
    	printf("key_up = %d \n", key_up);
    }
    
    int main(void)
    {
    	key();
    	key();
    
    	return 0;
    }
    

    在这里插入图片描述

    展开全文
  • 全局变量和局部变量初始化问题

    千次阅读 2019-08-23 16:08:42
    这里需要分清一个事实,是变量系统都会默认给初始化,只不过全局变量默认初始化为0,而局部变量被初始化为随机数,这个随机数用不了,后面会验证。现在,我们要讨论的是程序猿或者程序媛需不需要给全局变量和局部...
  • c++全局变量和静态局部变量初始化的时间 1.全局变量初始化在主函数之前 2.静态局部变量初始化在第一次调用这个静态局部变量之前 #include <iostream> using namespace std; class A { public: A(int a):m_a...
  • C++11 静态 局部变量 初始化 线程安全
  • 今天研究了一下c++中全局变量和局部变量初始化时的赋值情况,发现全局变量和局部变量会有所不同,下面是我的测试结果: 全局变量: #include &lt;iostream&gt; using namespace std; float testFloat; ...
  • C语言中,未初始化局部变量到底是多少? 答案往往是: 与编译器有关。 可能但不保证初始化为0。 未确定。 总之,全部都是些一本正经的形而上答案,这很令人讨厌。 但凡一些人给你滔滔不绝地扯编译器,C库,...
  • 这篇文章主要给大家介绍了关于C语言未初始化局部变量是多少,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习吧。在演示一个实际代码行为之前...
  • C语言的关键字static在有三个作用:声明静态函数,声明静态全局变量,声明静态局部变量声明静态函数在函数的返回类型前加个static,就是静态函数了。静态函数只能在声明它的文件中使用,其他文件看不到它。而不同的文件...
  • Java全局变量和局部变量初始化问题

    千次阅读 2020-02-21 23:24:53
    我们先来看一个比较的例子,最近在知乎看到的帖子。... //类的成员变量 public static void main(String[] args) { TestDemo td =new TestDemo(); //默认的构造方法 System.out.println(td.a); ...
  • 关于成员变量和局部变量初始化

    千次阅读 2022-01-26 14:34:38
    成员变量为什么可以不用初始化,而局部变量就必须要初始化
  • Java 局部变量初始化问题

    千次阅读 2018-06-08 09:05:49
    Java 中类的成员变量会被自动初始化,但是方法里头的局部变量不会被自动初始化   上图中 i 是成员变量,默认会自动初始化,所以直接使用没有报错。但是 j 是方法中的局部变量,没有初始化直接使用会出现编译...
  • 当你选择了一种语言,意味着你还选择了一组技术、一个社区。——Joshua Bloch一条长语句需要换行写,可以在行的末尾加入反斜杠 表示;...变量有全局变量、局部变量,全局变量系统默认初始化局部变量不会自...
  • 1、实践是检验真理的唯一标准,废话不多说,上代码。 #include <QCoreApplication> #include <...// 定义变量类 class Variable { public: Variable(const string& type) :_type(typ...
  • System.out.println("string类型全局变量初始化值"); } String dd; // System.out.println(dd); } } 首先应该了解的是,在类中声明的变量叫做全局变量(global variable),在方法中声明的变量叫做局部...
  • Java中局部变量必须初始化

    千次阅读 2020-12-24 22:37:30
    Java中有两种变量,局部变量和成员变量。 成员变量可以不进行初始化,虚拟机也会确保它有一个默认的值。 局部变量不能这样做,我们必须对它进行赋值,才能使用它。
  • 静态局部变量初始化问题

    千次阅读 2014-03-13 03:14:10
    在C中对静态变量初始化必须使用常量,在C++中却可以使用变量初始化静态变量。 C里面只允许静态初始化, C++允许动态初始化,可以参考C++标准3.6.2节 静态变量没有初始化时,与全局变量一样,默认值为0; 非...
  • 1、全局int变量(包括有static前缀的)未初始化, 默认值是0...解释:局部变量是存在栈中,数据量大,且生命周期短,若为局部变量进行初始化,开销很大。 -------所以,我们在定义局部变量的时候,最好直接初始化 ...
  • static Singleton *GetInstance() // 如果多次调用此函数,单例类的初始化也只会执行一次(即只会为这个静态局部对象分配一次内存空间) { static Singleton locla_s; return &locla_s; } templ.
  • 关于局部变量初始化

    千次阅读 2018-10-26 15:22:35
    我们经常被告知:在Java语言规定,局部变量必须要先初始化,然后才能使用。为什么呢? 首先 Java 语言就是这么规定的。其实无论成员变量还是局部变量都要初始化。只是JVM帮我们初始化了成员变量。 第一种解释: ...
  • C++局部变量和全局变量的初始化

    千次阅读 2020-03-02 23:17:18
    局部变量被定义时,系统不会对其初始化,此时局部变量的初始值未定义,必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
  • 最近看《C程序设计》第五版唐浩强著对静态局部变量有这样一段: > 对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的...
  • 局部变量和全局变量的初始化

    千次阅读 2018-05-15 09:09:41
    因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的。在C语言里,全局变量如果不初始化的话,默认为0,也就是说在全局空间...
  • 什么时候初始化 根据 C++ 标准,全局变量初始化要在 main 函数执行前完成,常识无疑,但是这个说法...答案是既有编译时,也可能会有运行时(seriously), 从语言的层面来说,全局变量初始化可以划分为以下两
  • 定义全局变量时,默认初值全是0,原因是全局变量放在堆区,这里由编译器统一初始化,即编译时候编译器统一把它们弄为0了 定义局部变量时,默认初始是随机的,因为局部变量的定义是在栈区,这个是程序运行起来后,...
  • 前几天,有个大佬考了我一个问题:为什么类的成员变量不需要指定值就可以自动赋予初始值,而方法内的局部变量就必须指定初始值呢?说实话,这个问题确实难倒我了,之后我在网上一顿操作,终于把这个问题弄得稍微明白...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 404,348
精华内容 161,739
关键字:

局部变量如何初始化