精华内容
下载资源
问答
  • 全局变量,局部变量和形式参数

    千次阅读 2016-03-20 02:07:36
    全局变量:全局变量在整个程序内都是可知的,因此可以被任何代码段所使用,他们在程序中执行时保持他们的值,可以再任何函数之外来创建他们,任何表达式都可访问他们。...2、在应该使用局部变量的地
    全局变量:全局变量在整个程序内都是可知的,因此可以被任何代码段所使用,他们在程序中执行时保持他们的值,可以再任何函数之外来创建他们,任何表达式都可访问他们。
    全局变量存储在一个固定的存储区,这时由编译器设定的,当程序中多个函数使用一个变量时,全局变量就变得很有用。但是不必要的全局变量却会带来麻烦:
    1、全局变量在整个程序运行中都占据内存,只有当程序结束时才被销毁。
    2、在应该使用局部变量的地方使用全局变量会降低函数的同用行,因为全局变量必须依靠在他本身之外的定义。
    3、使用大量的全局变量会使程序因为不可预知的副作用而产生错误。(有可能会因改变全局变量的值而产生错误)
    例:
    #include <stdio.h>
    int count; //全局变量
    int main()
    {
    count = 100 ;//可以使用count
    func1 ();
    return 0 ;
    }
    局部变量:在函数内部声明的变量成为局部变量,更具体的说是在代码块内部创建的变量叫做局部变量(代码块就是一对{}内的内容),局部变量在进入代码块被创建,出了代码块立即被销毁。
    例如:
    void fun1 ( void )
    {
    int x;
    x = 10;
    }
    void fun2( void )
    {
    int x;
    x = -99;
    }
    这两个x就是局部变量。因为局部变量在出了代码块就被销毁,因此我们可以使用static这个关键字修饰变量,使他的值保留下来。没有被static声明过得局部变量都存储在堆栈上。

    例:
    #include <stdio.h>
    int count;      //全局变量
    void func1( void );
    int main()
    {
         count = 100 ;
         func1 ();
         return 0 ;
    }
    void func1( void )
    {
         int count;   //局部变量
         for (count = 1 ; count < 10 ; count++)
      {
          putchar ( '.' );
      }
    }
    在这个例子中count被定义了两次,一次是全局变量,一次是局部变量,当全局变量和局部变量重名时,在局部变量声明的区域内我们以局部变量作为引用对象,并且再次期间对于全局变量没有任何影响。

    形式参数:形式参数出现在函数内,当函数要接受实参时,必须声明接受实参的变量,这些变量就是形参,同局部变量一样,形参再出了函数之后就被销毁。
    展开全文
  • 在java中, 方法的内部类可以访问方法中的局部变量,但必须用final修饰才能访问。 原因: 1.当方法被调用运行完毕之后,局部变量就已消亡了。但内部类对象可能还存在, 直到没有被引用时才会消亡。此时就会出现...
    在java中, 方法的内部类可以访问方法中的局部变量,但必须用final修饰才能访问。
    原因:
    1.当方法被调用运行完毕之后,局部变量就已消亡了。但内部类对象可能还存在,  直到没有被引用时才会消亡。此时就会出现一种情况,就是内部类要访问一个不存在的局部变量。
                             
    2.解决这一问题的办法就是使用final修饰局部变量,通过将final局部变量"复制"一份, 复制品直接作为方法内部类中的数据成员,这事方法内部类访问的其实是这个局部变量的复制品!   而且,由于被final修饰的变量赋值后不能再修改,所以就保证了复制品与原始变量的一致。
                             
    3.原因二的功能能实现的原因是:Java采用了一种copy   local   variable(复制局部变量)的方式来实现, 也就是说把定义为final的局部变量拷贝过来用,而引用的也可以拿过来用,只是不能重新赋值。 从而造成了可以access   local   variable(访问局部变量)的假象,而这个时候由于不能重新赋值, 所以一般不会造成不可预料的事情发生。
                            
    4. 使用final修饰符不仅会保持对象的引用不会改变,  而且编译器还会持续维护这个对象在回调方法中的生命周期.  所以这才是final变量和final参数的根本意义.
    展开全文
  • /**********************************************...*函数内部定义的局部变量与全局变量重名时,函数在使用该变量的时候会以局部变量覆盖全局变量,也就是只有局部变量会起效果。 ********************************...
    /*********************************************************************************************************
    *函数内部定义的局部变量与全局变量重名时,函数在使用该变量的时候会以局部变量覆盖全局变量,也就是只有局部变量会起效果。
    *********************************************************************************************************/
    #include <stdio.h>
    #include <stdlib.h>
    
    int n=5;
    void fun(int m)
    {
        static int n=1;
        if(m<10)
        {
            fun(m+1);
            printf("%d ",n++);//打印 1 2 3 4 5 6 7
        }
    }
    void test_print()
    {
        printf("%d\n",n);//打印5
    }
    
    int main()
    {
        int n;
        scanf("%d",&n);//输入 3
        printf("%d\n",n);//打印3
        fun(n);
        test_print();
        return 0;
    }
    

     

    展开全文
  • 对于方法的参数局部变量,必须有final修饰才可以访问”。于是我就有点疑惑,为什么必须是final的?  于是我就试了一下访问不是final的变量,发现eclipse给出了错误提示:Cannot refer to the non-final local v


            内部类的种类一共分为四种,我看其他几种内部类的时候思路都是很清晰的,然后我就碰到了这一条:“方法中的内部类可以访问外部类成员。对于方法的参数和局部变量,必须有final修饰才可以访问”。于是我就有点疑惑,为什么必须是final的?

            于是我就试了一下访问不是final的变量,发现eclipse给出了错误提示:Cannot refer to the non-final local variable localVal defined in an enclosing scope。不能在一个即将关闭的作用域内尝试引用一个非final的变量。差不多我就理解了,因为方法内的参数或者是局部变量的话,当这个方法执行结束之后,它们也就被释放了。加入内部类中的一个引用指向了这个局部变量,再次尝试访问时,就会发生错误。

           给出下面的例子:

    public class AnonymousClass {
    	public Object makeInner(String localVal){
    		return new Object(){
    			private String s = localVal;
    			public String toString(){
    				return s;
    			}
    		};
    	}
    	public static void main(String[] args) {
    		AnonymousClass ac = new AnonymousClass();
    		Object ob = ac.makeInner("23");
    		System.out.println(o.toString());
    	}
    }
          程序new了一个类对象,然后调用了makeInner方法,传递了一个String类型的参数,进入到方法内部,返回了一个内部匿名类。匿名类中成员引用变量s跟参数localVal指向相同的内存地址,并在重写的toString方法中,返回了成员变量s。调用结束,localVal指向的内存空间释放,返回到主程序,调用ob的toString方法,输出s,但是此时的s指向的内存地址已经被释放了,所以程序是不会让你这么干的。所以内部类访问所在方法的参数或局部变量为什么必须是final的,因为方法结束之后他们空间并没有释放,依然是有效的。

    展开全文
  • java方法 成员变量 局部变量概述

    千次阅读 2017-12-23 20:37:58
    成员变量,可以先使用后定义,局部变量必须先定义而后才能使用. 2.3 变量的生命周期 变量的作用域指的是变量的存在范围,只有在这个范围内,程序代码才能访问它。当一个变量被定义时,它的作用域就确定了。变量的...
  • 看下面的例子,哪些变量可以被局部内部类Inner访问并修改? public class Test{ private int a; static int b; public void func(){ int j=10; class Inner{ } } } 逐个分析: 1.Test类的成员属性a...
  • 实参、形参、局部变量和全局变量

    千次阅读 2020-09-15 16:53:39
    目录实参和形参实参数据传递函数调用过程形参实参和形参的关系局部变量和全局变量局部变量局部变量的作用域说明:全局变量全局变量说明: 实参和形参 实参 实际参数简称“实参”。在调用有参函数时,函数名后面括号...
  • python变量的作用域:局部变量和全局变量

    万次阅读 多人点赞 2018-08-10 18:14:10
    变量定义以后,是有一定的使用范围,称之为变量的作用域。比如Java中,变量的使用范围是变量声明时所在的{}范围,而...局部变量:就是在函数内部定义的变量 1.全局函数和局部函数的作用域 局部变量作用域:只能在...
  • Python中都全局变量和局部变量

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

    千次阅读 多人点赞 2020-10-27 19:50:48
    局部变量 定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数的内部就是无效的,再使用就会报错。 二者区别 1、 定义的位置不一样 局部变量:在方法的内部; 成员变量:在...
  • } } 也就是说匿名内部类之所以可以访问局部变量,是因为在底层将这个局部变量的值传入到了匿名内部类中,并且以匿名内部类的成员变量的形式存在,这个值的传递过程是通过匿名内部类的构造器完成的。 那么问题又...
  • 我们知道lua脚本语言的变量是弱类型的,即变量没有类型,值才有类型,同一名称的变量具体类型要看所赋值的类型,如下 ...全局变量和局部变量,类似于shell脚本 全局变量:顾名思义,其生命有效期是全局的,整个lua
  • 局部变量及其生命周期详解

    千次阅读 2020-06-06 17:01:36
    局部变量:在函数内部或复合语句内部定义的变量,在其作用域内有效(作用域{}); 即:在一个函数内部定义的变量只在本函数范围内有效,也就是说只有在本函数内才能引用它们,在此函数外是不能使用这些变量的。在...
  • 全局变量和局部变量的区别

    万次阅读 多人点赞 2018-05-13 16:15:15
    3)如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。 register变量 为了提高效率,...
  • 为什么局部变量是线程安全的?

    千次阅读 2019-09-17 14:51:04
    局部变量放在栈帧里,局部变量的作用域是方法内部局部变量是和方法同生共死的,一个变量如果想跨越方法的边界,就必须创建在堆里。 4. 调用栈和线程是什么关系? 两个线程可以同时用不同的参数调用相同的方法...
  • C语言全局变量和局部变量总结

    千次阅读 2018-08-28 15:01:10
    3)如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。 register变量 为了提高...
  • 使内部类持有外部类的引用, 并且通过在构造方法上添加参数注入这个引用, 在调用构造方法时默认传入了外部类的引用。 我们之所以感到疑惑, 就是因为编译器使用的障眼法。当我们把字节码反编译出来之后, 编译器的...
  • c++ 线程局部变量thread_local

    千次阅读 2020-01-14 10:07:52
    Linux中的线程局部存储(一)  本章节转自:https://blog.csdn.net/cywosp/article/details/26469435  在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到...
  • 其实这个题目考了很多知识点,最后就是参数传递中引用类型的用法,这个也是ECMAScript中基础的一个难点,结合前面的一些,变量提升,重复宣告,形参与局部变量同名,算是解释清楚了。 若有错误,欢迎指出。
  • c语言中形参与实参: 形参 form parameter ...//在函数中,形参就可以当作是一个局部变量。 if ( a>b ) return a; else return b; } 函数调用 int main() { int a=3,b=5 ; printf( "max=%d\n" , max(a,b) )
  • 定义在函数内部的变量称为局部变量(函数的形参也是局部变量),局部变量只能在函数内部使用,只有在函数调用时才能够被创建,在函数调用之后会动销毁。 全局变量 定义在函数外部,模块内部的变量称为全局变量,所有...
  • 在一个方法内,可以定义和成员变量同名的局部变量参数,此时成员变量被屏蔽。此时如果想要访问成员变量,可以通过 this 关键字来访问,this 关键字来访问,this 为当前实例的引用,如果要访问类变量,可以通过类名...
  • 于是问题就转换成了,匿名内部类能访问外部类方法的局部变量吗? 答案是不行,即使有外部类的引用,也无法访问到外部类方法里面的局部变量。 因此,外部类的局部变量,就只能通过匿名内部类的构造方法传进去。 ...
  • Java局部变量final

    千次阅读 2018-10-26 09:25:36
    理由:局部变量是线程内部共享的,每一个线程内的不能访问其他线程的局部变量,但是上诉的情况却违背了这一原则,那么加上final为什么就可以了呢?原因是加上final之后,在创建B线程的时候会把final标记的变量作为...
  • 成员变量、类变量(静态变量)、局部变量的区别

    千次阅读 多人点赞 2017-08-03 20:31:04
    如果局部变量的名字和成员变量的名字相同, 要想在该方法中使用成员变量,必须使用关键字this [java] view plain copy class People {   String name = "类体重定义的name";
  • 1、形参和实参 1.1 形参的含义及使用 1.2 实参的含义及使用 2、局部变量和全局变量 2.1 变量作用域的概念 2.2 局部变量 2.3 全局变量 2.4 修改全局变量值
  • Talk is cheap, show me your ... * 在lambda表达式内部,修改lambda表达式外部的局部变量的值 */ private synchronized void updateLocalVariable() { List<String> list = new ArrayList<>(); ...
  • js 中定义的 全局变量,局部变量

    千次阅读 2018-10-17 10:19:27
    关于变量和参数问题: var a = 2; //全局变量 function func() { var a = 1; //局部变量 ...函数外面定义的变量是全局变量,...*在函数内使用var关键字定义的变量是局部变量,即出了函数外边无法获取。 js函数定义...
  • 局部变量内部变量: 1.只在本函数内有效 2.主函数中定义变量只在主函数中有效,而不是在整个文件内有效。 主函数也不能使用其他函数定义的变量。 3.形式参数也是局部变量。 4.复合语句(比如有大括号)中定义的变量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 282,279
精华内容 112,911
关键字:

局部变量一定是内部参数吗