精华内容
下载资源
问答
  • /**********************************************...*函数内部定义的局部变量与全局变量重名时,函数在使用该变量的时候会以局部变量覆盖全局变量,也就是只有局部变量会起效果。 ********************************...
    /*********************************************************************************************************
    *函数内部定义的局部变量与全局变量重名时,函数在使用该变量的时候会以局部变量覆盖全局变量,也就是只有局部变量会起效果。
    *********************************************************************************************************/
    #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;
    }
    

     

    展开全文
  • 譬如全局变量作用域为整个文件(准确的说是定义该全局变量的文件中该变量定义/声明之后的部分。只不过一般情况下全局变量都在文件头部定义,因此说全局变量为文件作用域。),局部变量为代码块作用域。所谓代码块作用...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    深度解析:

    C语言中有“作用域”的概念。譬如全局变量作用域为整个文件(准确的说是定义该全局变量的文件中该变量定义/声明之后的部分。只不过一般情况下全局变量都在文件头部定义,因此说全局变量为文件作用域。),局部变量为代码块作用域。

    所谓代码块作用域,代码块是指用一对大括号{}括起来的部分(譬如一个函数的函数体,for循环的循环体等)。也就是说局部变量的作用域其实是定义这个局部变量的代码块中该变量定义体之后的部分。

    这样看来,至少得到以下两个结论:

    l 变量的作用域是有大有小的

    l 变量的作用域是有重叠部分的。譬如在一个函数内,该函数的局部变量和整个文件的全局变量都覆盖这个作用域,这就是作用域的重叠。

    重叠作用域中,如果全局变量名和局部变量名不同不会造成困扰。因为我们可以很容易的通过变量名来区分两个变量(我们班有个叫旺财的,别人班有个叫富贵的,我叫旺财你肯定知道我要找的是谁吧!)。但是在两个变量名相同时要怎么办呢(我们班有个旺财,隔壁班也有个旺财,我在走廊里喊一声旺财,你觉得我在叫谁···)?

    这种情况逻辑学上叫二义性(ambiguity)。即有两种可能的解释,却没有任何区分的方法。怎么办呢?人为规定嘛。C语言规定:在变量作用域重叠时,作用域为小范围的变量覆盖大范围的变量。譬如函数内有个局部变量var,文件内有个全局变量var。则在该函数内部(准确的说是函数内部var局部变量定义体之后的部分),你使用var访问的是var局部变量,此处全局变量var被掩蔽(要想在此处访问全局变量var,对于C++可以使用::符号,而C语言中则没有域操作符::)。

    代码如下:

    #include

    int var = 7; // 全局变量var

    void func1(void)

    {

    printf("In func1, var = %d.\n", var);

    }

    void func2(void)

    {

    int var = 5;

    printf("In func1, var = %d.\n", var);

    }

    void func3(void)

    {

    int var = 5;

    #ifdef __cplusplus

    printf("__cplusplus defined.\n");

    printf("In func1, var = %d.\n", ::var);

    #endif

    }

    int main(void)

    {

    func1();

    func2();

    func3();

    return 0;

    }

    /*

    * gcc编译,执行结果:

    * In func1, var = 7.

    * In func1, var = 5.

    *

    * 结论:在line13中,func2中局部变量var屏蔽了全局变量var。

    *

    * g++编译,执行结果:

    * In func1, var = 7.

    * In func1, var = 5.

    * __cplusplus defined.

    * In func1, var = 7.

    */

    展开全文
  • 函数内部定义的局部变量与全局变量重名时,函数在使用该变量的时候会以局部变量覆盖全局变量。也就是只有局部变量会起效果。在此定义域中赋值等操作时都不会使用到全局变量。 在main函数或其他函数里定义了局部变量...
    1. 函数内部定义的局部变量与全局变量重名时,函数在使用该变量的时候会以局部变量覆盖全局变量。也就是只有局部变量会起效果。在此定义域中赋值等操作时都不会使用到全局变量。
    2. 在main函数或其他函数里定义了局部变量,同时同名的全局变量同时也存在,当调用一个使用了该变量的函数(该变量在此函数中无定义)时,函数会使用全局变量。而不是main或其他函数中定义的同名变量。
    3. #include <stdio.h>
      
      static int n=5;
      
      void fun()
      {
          printf("fun  n= %d \n",++n);
          int n=1;
          printf("fun  n= %d \n",++n);
      }
      
      void print()
      {
          printf("%d\n",n);
      }
      
      int main()
      {
          printf("main n= %d\n",n);
          fun();
          return 0;
      }

      输出:

    展开全文
  • 局部变量全局变量重名的时候,局部会屏蔽全局变量,如果需要使用全局变量,需要使用“::"。 局部变量可以全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而...

             当局部变量和全局变量重名的时候,局部会屏蔽全局变量,如果需要使用全局变量,需要使用“::"。

              局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 

              当全局变量与局部变量重名时,局部变量对全局变量的屏蔽就是说在运行同样名的变量时,使用的是局部变量,而不是全局变量。而且它们存放的地址不同。

    展开全文
  • //局部变量就是私有的变量2、全局变量://就是定义在函数外部的变量(外部变量),//全局变量起作用的范围是当前文件中的所有函数。//全局变量就是所有函数共享的变量三、代码示例1、局部变量...
  • 函数内部定义的局部变量与全局变量重名时,函数在使用该变量的时候会以局部变量覆盖全局变量。也就是只有局部变量会起效果。在此定义域中赋值等操作时都不会使用到全局变量。 在main函数或其他函数里定义了局部变量...
  • 局部变量优先级比全局变量优先级高,这本没什么,但若局部变量与全局变量重名,那就有的说了,看代码: var str='test'; function shuchu(){  document.write(str+'');  var str='world';  document.write...
  • C++中局部变量可以和全局变量重名 最近遇到一道题,全局变量和局部变量重名,如何把全局变量赋值为局部变量? 对于重名,显然是局部 覆盖 全局。但是这时使用全局变量到时没有涉及过。 对于c++而言,在...
  • C++中局部变量可否与全局变量重名

    千次阅读 2019-01-19 14:11:31
    此问题研究的是变量的作用域的问题。一个声明将一个名字引进一个作用域;局部变量(通常在函数中定义)的作用域是...与全局变量重名局部变量可以屏蔽全局变量,如果想在块内使用全局变量需要通过作用域解析运算符...
  • 局部变量能否和全局变量重名

    千次阅读 2019-09-16 09:53:33
    1、局部变量能否和全局变量重名?  答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: " (域解析符)  局部变量可以全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。...
  • 全局变量与局部变量重名的情况

    千次阅读 2020-03-04 23:15:12
    全局变量局部变量出现重名时, 在局部变量作用域内,全局变量失效
  • 今天遇到个bug,最后终于知道原因了,js方法入参和全局变量重名,用入参赋值全局变量失败,就是说方法入参不能和全局变量重名。 现在下面的例子也说明,局部变量和全局变量不可以同名不光是入参,只要同名赋值就会...
  • 局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同...
  • 5.4 (*)变量的存储属性 ...5.4.2 局部变量与全局变量重名时 在局部变量作用域内优先处理局部变量,全局变量不起作用。 5.4.3 变量的存储类型 auto register static:在函数体内部使用时,称为静态局部
  • 局部变量 定义:在方法内定义的变量称为“局部...当局部变量与全局变量重名时,起作用的是局部变量。 成员变量 定义:在类体的变量部分中定义的变量,也称为字段。 区别: java中没有全局变量的定义,这是C中的
  • 全局变量: 当在JavaScript中定义变量,在当前script标签中,若在定义该变量前去调用该变量,值是undefined,而在没有定义该变量就去调用该变量是会报错的。原因是所有定义的变量都是先在内存中开辟该变量的存储...
  • 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ; 局部变量可以全局变量同名, 在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器 而言...
  • 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,...
  • 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,...
  • 来源:Python语言程序设计 -嵩天 一、局部变量 局部变量是函数内部的占位符,可能与全局...在函数内部没有真实创建一个局部变量,但是使用的局部变量与全局变量重名,在函数调用中,相当于对全局变量进行操作。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,172
精华内容 7,268
关键字:

局部变量与全局变量重名