精华内容
下载资源
问答
  • #include int a = 3,b = 5; //a,b是全局变量 int main() ... //a是局部变量局部变量a的作用范围主函数结束 printf("max = %d\n",max(a,b)); //全局变量b的作用范围主函数结束 return 0; } int
    #include<stdio.h>
    
    int a = 3,b = 5;		//a,b是全局变量
    int main()
    {
    	int max(int a,int b);		//函数声明,a,b是形参
    	int a = 8;					//a是局部变量,局部变量a的作用范围主函数结束
    	printf("max = %d\n",max(a,b));		//全局变量b的作用范围主函数结束
    	return 0;
    }
    
    int max(int a,int b)		//a,b是函数形参
    {
    	int c;
    	c = a>b?a:b;			//形参a,b的作用范围被调用函数完
    	return c;
    }
       //结果:max = 8;

    展开全文
  •  说一下在使用过程中遇到的比较头疼的一点,就是外部变量与局部变量的屏蔽机制。  如下代码: a = (callback) -> setTimeout callback, 0 a ()-> console.log "#{temp} in the callback" temp = 3 ...

      刚接触CoffeeScript时,一直不清楚它存在的意义,搜索过部分资料,可以总结为两点:①语法糖,减少代码量增加可读性②增强js代码的合法性,编译之后的js代码跟手动写的相比基本没语法错误。

    其实自我感觉代码量确实减少了,但是也并不是很可观,语法糖确实使用起来很方便,而语法错误这一点,个人感觉只要是对js有一定了解的人不一定会比他差,差也差不太多,个人感觉。

      说一下在使用过程中遇到的比较头疼的一点,就是外部变量与局部变量的屏蔽机制。

      如下代码:

    a = (callback) ->
        setTimeout callback, 0
    a ()->
        console.log "#{temp} in the callback"
        temp = 3
    
    temp = 1;
    console.log "#{temp} out the callback"

      在这句输出语句中 console.log "#{temp} in the callback",temp一直是undefined,众所周知在coffee的编译中会自动将代码中出现的变量放在函数开头进行声明,而在js中如下代码:

    var a, temp;
    
    a = function(callback) {
      return setTimeout(callback, 0);
    };
    
    a(function() {
      console.log("" + temp + " in the callback");
      return temp = 3;
    });
    
    temp = 1;
    
    console.log("" + temp + " out the callback");
    

      上述代码中的输出应该是 “1 out the callback", "1 in the callback"

      在callback中是能读取到外部的temp变量的,而在coffee中却读取不到,什么情况呢,于是将编译后的代码仔细阅读一遍发现(看过好几次,奈何项目中该函数内变量太多一直没看到,囧),编译后的代码是

    var a, temp;
    
    a = function(callback) {
      return setTimeout(callback, 0);
    };
    
    a(function() {
      var temp;//注意此处,重新声明了temp变量
      console.log("" + temp + " in the callback");
      return temp = 3;
    });
    
    temp = 1;
    
    console.log("" + temp + " out the callback");
    

      发现在callback中又重新声明了temp变量将外部变量给屏蔽掉了,如何解决这个问题呢,我们只需将temp = 1的赋值提到callback的定义之前即可。

      还记得在一开始接触coffee时,网上有同学问过coffee中如何写出下面的语句:

    var a = 1;
    function b () {
      var a = 2;
    }
    

      现在有解决方案了,我们只需要将a=1的赋值放在函数b下面即可:

    b = ()->
      a = 2
    a = 1
    

      还有一点需要注意的是,coffee中‘’与”“的编译结果也会不一样的,如:

    a = 1
    'a is #{a}' //输出 a is #{a}
    "a is #{a}" //输出 a is 1
    

      事后仔细想了想,或许可能一开始就对coffee带有一种排斥心理,因此也没好好看过官方文档,带来各种”莫名其妙“的错误

      俗话说的好,存在即合理,任何语言都有自己存在的意义,自己去思考吧,不过我一直觉得它的可读性也没有js强啊...╯□╰



    转载于:https://www.cnblogs.com/DARKDD/p/4109442.html

    展开全文
  • 局部变量与外部变量

    2016-12-29 14:43:00
    name = 'lhf' def chang_name(): print('我的名字',name) #外不变量我的名字 lhf chang_name() ... print('我的名字',name #美女局部变量我的名字 美女 chang_name() print(name)#外部变量lhf def ...
    name = 'lhf'
    def chang_name():
        print('我的名字',name) #外不变量我的名字 lhf
    chang_name()
    def chang_name():
        name = '美女'
        print('我的名字',name #美女局部变量我的名字 美女
    chang_name()
    print(name)#外部变量lhf
    def chang_name():
        global name
        name='美女2'
        print('我的名字',name ) #局部变量我的名字 美女2
    chang_name()
    print(name) #局部变量美女2
    

     

    转载于:https://www.cnblogs.com/huangjinshan/p/6232938.html

    展开全文
  • 一、变量按作用域范围分类 局部变量:在函数内定义的变量,作用域限于函数内。 说明:(1)主函数定义的变量不能再其他函数中使用,主函数也不能使用其他函数定义的变量。...如果在定义点前的函数要使用该外部变量,要

    一、变量按作用域范围分类

    局部变量:在函数内定义的变量,作用域限于函数内。

    说明:(1)主函数定义的变量不能再其他函数中使用,主函数也不能使用其他函数定义的变量。
    (2)形参变量属于被调函数的局部变量,实参变量属于主调函数的局部变量。
    (3)允许在不同的函数中使用相同的变量名,但它们代表不同的对象,占用不同的存储单元,互不干扰。
    (4)在复合语句中也可以定义变量,但其作用域只能在复合语句内。
    全局变量:在函数外定义的变量,它的作用域是从变量定义开始,到程序文件的末尾。如果在定义点前的函数要使用该外部变量,要使用关键字extern。
    说明:(1)全局变量由于一个文件中所有函数都能引用全局变量的值,因为在一个函数中能够改变了变量的值会对其他函数产生影响,带来不安全性,并且一直占用存储空间,所以不建议用
    (2)全局变量和局部变量同名时,在函数中全局变量隐藏,局部变量起作用。
    实例:

    #include <stdio.h>
    void gx();
    void gy();
    int main()
    {
    	extern int x,y;				///用extern将外部变量的作用域扩展到前面
    	printf("1:x=%d,y=%d\n",x,y);
    	y=246;
    	gx();
    	gy();
    	return 0;
    }
    void gx()
    {
    	extern int x,y;				//用extern将外部变量的作用域扩展到前面
    	x=135;
    	printf("2:x=%d,y=%d\n",x,y);
    }
    int x,y;						//定义外部变量
    void gy()
    {
    	printf("3:x=%d,y=%d\n",x,y);
    

    二、变量按生存周期分类

    动态变量:动态变量在函数调用时分配存储空间,函数调用结束后释放存储空间。它可以是函数的形参,局部变量,函数调用时的现场保护和返回地址。
    静态变量:在运行期间由系统分配固定的存储空间,在静态存储区的变量。它可以是全局变量,也可以是局部变量。

    几个关键字:

    1. auto:动态变量,一般可省略。
    2. static:静态变量,分为静态局部和静态全局。
      (1)静态局部变量:它和局部变量的区别在于函数退出时,变量始终存在,但不能被其他函数使用,当再次进入该函数时,能保存上次的结果继续使用。如果不赋初值,则自动赋初值0或空字符。
      (2)静态全局变量:只在定义它的源文件中可见,在其他源文件中不可见。它和全局变量的区别是,全局变量可以使用关键字extern被其他源文件使用,而静态全局变量不能。
    3. register:寄存器变量,不存入内存,直接保存在CPU内的寄存器中,提高执行速度。一般把使用最频繁的变量定义为register变量,如循环变量。它不能是静态变量,只能是动态变量。
      例如:
    {
    	register int i;
    	for(i=0;i<n;i++)
    	{
    		...
    	}
    	...
    }	
    

    三、按函数能否被其他源文件使用,分为内部函数和外部函数

    内部函数: 只能被本程序文件调用,和其他文件中的同名函数互不干扰。使用关键字static+函数。例如:

    static int max(int a,int b)
    {
    ...
    }
    

    外部函数: 可以被其他文件调用,使用关键字extern+函数,如果省略extern,则默认为外部函数。例如:

    extern int fun(int x,int y)
    {
    ...
    }
    

    实例:

    #include <stdio.h>
     
    void func();//函数声明,主要是因为被调用的函数定义写在了main函数后面了
     
    int n = 1; //全局变量
     
    int  main(void)
    {
        static int a; // 静态局部变量,但静态局部变量只在定义它的函数中可见,并且只初始化一次
        int b = -10; // 局部变量
     
        printf("main:   a=%d,   b=%d,   n=%d\n",a,b,n);
     
        b += 4;
     
        func();
     
        printf("main:   a=%d,   b=%d,   n=%d\n",a,b,n);
        n += 10;
     
        func();
        printf("main:   a=%d,   b=%d,   n=%d\n",a,b,n);
     
    }
    void func()
    {
        static int a = 2; // 静态局部变量
        int b = 5; // 局部变量
        a += 2;
        n += 12;
        b += 5;
       printf("func:   a=%d,   b=%d,   n=%d\n",a,b,n);
    }
    

    运行结果:
    在这里插入图片描述
    结果分析:

    首先明确main函数和func函数里面都有静态局部变量a和局部变量b,由于它们的固有性质,它们都只在定义它的函数里有效,所以它们互不干扰,所以只要在本函数里分析即可,而全局变量n,在main和func函数里都有效,所以分析它的值应该考虑n在这两个函数里的变化

    展开全文
  • 函数中的每个局部变量只在函数被调用时存在,在函数执行完毕退出时消失。’局部变量‘又称‘自动变量’。 外部变量在程序执行期间一直存在,而不是在函数调用时产生、在函数执行完毕时消失。即使在外部变量赋值的...
  • 1全局变量 定义在函数外,不属于任何函数,生存周期为定义开始直到程序运行结束,...与局部变量类似,只不过其生存周期为定义开始直到程序运行结束。其赋初值只会在函数第一次调用时起作用,若没有赋值,自动赋值为0
  • 关于静态局部变量与静态外部变量

    千次阅读 2017-11-09 19:14:10
    静态局部变量特点:static int a; 1:静态局部变量存储在静态存储区,如果赋有初值,函数调用期间只赋值一次,下次调用该函数时,静态局部变量值为上次调用之后的结果,原因:静态局部变量在函数调用期间是不释放的...
  • 全局变量与局部变量

    2019-04-09 14:54:23
    一、全局变量与局部变量 全局变量:它是所有的函数、类、名字空间外部定义的,包括main()函数。 局部变量:{}围起来的就是一个块,块里面的都是局部变量。 1.error 在一个块中,只能定义一次 int x=100; ...
  • 成员变量与局部变量

    2019-04-26 19:30:08
    成员变量与局部变量 开发工具与关键技术:java,成员变量,局部变量 作者:张启翔 撰写时间:2019-04-26 下述文章通俗易懂,不妨看下去 成员变量与局部变量的区别: 成员变量: 定义的位置:直接定义在类的当中,在...
  • //外部引用变量与局部变量 #include<stdio.h>//外部变量引用时优先级没有局部变量的高,且外部变量引用法只是一种来引用外部定义变量的方法; extern int a; //外部变量说明 void s() { int a=100; //局部变量...
  • 如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。 从变量值的存储类别上区分,可将变量划分为静态存储与动态存储两种。静态存储在整个程序运行期间均具有固定的存储...
  • 主要介绍了Android中的全局变量与局部变量使用小结,全局变量顾名思义就是在整个的类中或者可在多个函数中调用的变量,也称为外部变量,局部变量则是特定过程或函数中可以访问的变量,需要的朋友可以参考下
  • 成员变量与局部变量 java 1613807617 关于 成员变量,类的内部,方法的外部 局部变量,方法的内部 区别
  • 全局变量与局部变量 最近在写python程序遇到的小问题之前也没有怎么注意: 提醒自己一下 UnboundLocalError: local variable ‘value’ referenced before assignment 在函数外部已经定义了变量n,在函数内部对该...
  • 局部变量 外部变量 存储类别 auto register 局部static 外部static 外部extern 存储方式 动态 静态 存储区 动态区 寄存器 静态存储区 生存期 函数调用开始至结束 ...
  • * 局部变量:在函数内部定义的变量,只能在函数内部使用 在函数内部修改全局变量,使用关键字global num = 1 def demo(): global num num = 2 print(num) demo() 变量定义位置 变量定义的位置,应在调用之前...
  • 全局变量:定义在函数外部的变量。禁止使用 局部变量:定义在函数内部的变量,包含形参 extern:引用外部符号(变量,函数)
  • 接下来,利用python软件输出结果详细说明全局变量与局部变量的区别与用法。 全局变量:能被当前文件中所有python代码访问【先声明赋值,后使用变量】 users='admin' #声明一个全局变量 # 普通代码中使用 print...
  • Lua中的 默认为全局变量,局部变量使用 local 在函数 if for 中定义的也是全局变量 在语句内部输出局部变量可以、但是在外部即无法输出 总结:带有 local 的全为 局部,not local 的即为全局
  • 非自动变量有两种,一种是全局变量,一种是静态变量(不被释放)2、全局变量和static变量一样只初始化一次,用static定义的全局变量不能被外部文件通过extern来使用,用static定义的局部变量只初始化一次例如void eg...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,975
精华内容 790
关键字:

外部变量与局部变量