精华内容
下载资源
问答
  • 作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量  作用域作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的...

    作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量  

    作用域:

    作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。

    全局变量:

    全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响,问题可以使用的(也就是说,全局变量的生命期一直到程序的结束)。如果在一个文件中使用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个数据。

    局部变量:

    局部变量出现在一个作用域内,它们是局限于一个函数的。局部变量经常被称为自动变量,因为它们在进入作用域时自动生成,离开作用域时自动消失。关键字auto可以显式地说明这个问题,但是局部变量默认为

    auto,所以没有必要声明为auto。

    寄存器变量

    寄存器变量是一种局部变量。关键字register告诉编译器“尽可能快地访问这个变量”。加快访问速度取决于现实,但是,正如名字所暗示的那样,这经常是通过在寄存器中放置变量来做到的。这并不能保证将变置在寄存器中,甚至也不能保证提高访问速度。这只是对编译器的一个暗示。

    使用register变量是有限制的。不可能得到或计算register 变量的地址。register变量只能在一个块中声明(不可能有全局的或静态的register变量)。然而可以在一个函数中(即在参数表中)使用register变量作为一个形式参数。

    一般地,不应当推测编译器的优化器,因为它可能比我们做得更好。因此,最好避免使用关键字register。

    静态变量

    关键字static有一些独特的意义。通常,函数中定义局部变量在函数中作用域结束时消失。当再次调用这个函数时,会重新创建变量的存储空间,其值会被重新初始化。如果想使局部变量的值在程序的整个生命期里仍然存在,我们可以定义函数的局部变量为static(静态的),并给它一个初始化。初始化只在函数第一次调用时执行,函数调用之间变量的值保持不变,这种方式,函数可以“记住”函数调用之间的一些信息片断。

    我们可能奇怪为什么不使用全局变量。static变量的优点是在函数范围之外它是不可用的,所以它不可能被轻易改变。这会使错误局部化。

    static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

    外部变量

    extern告诉编译器存在着一个变量和函数,即使编译器在当前的文件中没有看到它。这个变量或函数可能在一个文件或者在当前文件的后面定义。例如extern int i;编译器会知道i肯定作为全局变量存在于某处。当编译器看到变量i的定义时,并没有看到别的声明,所以知道它在文件的前面已经找到了同样声明的i 。

    常量

    const告诉编译器这个名字表示常量,不管是内部的还是用户定义的数据类型都可以定义为const。如果定义了某对象为常量,然后试图改变它,编译器将会产生错误。在C++中一个const必须有初始值。

    volatile变量

    限定词const告诉编译器“这是不会改变的”(这就是允许编译器执行额外的优化);而限定词volatile则告诉编译器“不知道何时变化”,防止编译器依据变量的稳定性作任何优化。

    展开全文
  • 作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量作用域:作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义...

    作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量 作用域: 作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。 全局变量: 全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响,问题可以使用的(也就是说,全局变量的生命期一直到程序的结束)。如果在一个文件中使用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个数据。 局部变量: 局部变量出现在一个作用域内,它们是局限于一个函数的。局部变量经常被称为自动变量,因为它们在进入作用域时自动生成,离开作用域时自动消失。关键字auto可以显式地说明这个问题,但是局部变量默认为 auto,所以没有必要声明为auto。 寄存器变量 寄存器变量是一种局部变量。关键字register告诉编译器“尽可能快地访问这个变量”。加快访问速度取决于现实,但是,正如名字所暗示的那样,这经常是通过在寄存器中放置变量来做到的。这并不能保证将变置在寄存器中,甚至也不能保证提高访问速度。这只是对编译器的一个暗示。 使用register变量是有限制的。不可能得到或计算register 变量的地址。register变量只能在一个块中声明(不可能有全局的或静态的register变量)。然而可以在一个函数中(即在参数表中)使用register变量作为一个形式参数。 一般地,不应当推测编译器的优化器,因为它可能比我们做得更好。因此,最好避免使用关键字register。 静态变量 关键字static有一些独特的意义。通常,函数中定义局部变量在函数中作用域结束时消失。当再次调用这个函数时,会重新创建变量的存储空间,其值会被重新初始化。如果想使局部变量的值在程序的整个生命期里仍然存在,我们可以定义函数的局部变量为static(静态的),并给它一个初始化。初始化只在函数第一次调用时执行,函数调用之间变量的值保持不变,这种方式,函数可以“记住”函数调用之间的一些信息片断。 我们可能奇怪为什么不使用全局变量。static变量的优点是在函数范围之外它是不可用的,所以它不可能被轻易改变。这会使错误局部化。 外部变量 extern告诉编译器存在着一个变量和函数,即使编译器在当前的文件中没有看到它。这个变量或函数可能在一个文件或者在当前文件的后面定义。例如extern int i;编译器会知道i肯定作为全局变量存在于某处。当编译器看到变量i的定义时,并没有看到别的声明,所以知道它在文件的前面已经找到了同样声明的i 。 常量 const告诉编译器这个名字表示常量,不管是内部的还是用户定义的数据类型都可以定义为const。如果定义了某对象为常量,然后试图改变它,编译器将会产生错误。在C++中一个const必须有初始值。 volatile变量 限定词const告诉编译器“这是不会改变的”(这就是允许编译器执行额外的优化);而限定词volatile则告诉编译器“不知道何时变化”,防止编译器依据变量的稳定性作任何优化。 参考《Thinking in C++》第一卷第三章

    展开全文
  • 作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量 作用域作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点

    static 变量 作用域 全局变量 局部变量 外部变量 常量 volatile变量

    2人收藏此文章, 我要收藏发表于2年前 , 已有1077次阅读 共2个评论

    作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量

    作用域:

    作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。

    全局变量:

    全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响,问题可以使用的(也就是说,全局变量的生命期一直到程序的结束)。如果在一个文件中使用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个数据。

    局部变量:

    局部变量出现在一个作用域内,它们是局限于一个函数的。局部变量经常被称为自动变量,因为它们在进入作用域时自动生成,离开作用域时自动消失。关键字auto可以显式地说明这个问题,但是局部变量默认为

    auto,所以没有必要声明为auto。

    寄存器变量

    寄存器变量是一种局部变量。关键字register告诉编译器“尽可能快地访问这个变量”。加快访问速度取决于现实,但是,正如名字所暗示的那样,这经常是通过在寄存器中放置变量来做到的。这并不能保证将变置在寄存器中,甚至也不能保证提高访问速度。这只是对编译器的一个暗示。

    使用register变量是有限制的。不可能得到或计算register 变量的地址。register变量只能在一个块中声明(不可能有全局的或静态的register变量)。然而可以在一个函数中(即在参数表中)使用register变量作为一个形式参数。

    一般地,不应当推测编译器的优化器,因为它可能比我们做得更好。因此,最好避免使用关键字register。

    静态变量

    关键字static有一些独特的意义。通常,函数中定义局部变量在函数中作用域结束时消失。当再次调用这个函数时,会重新创建变量的存储空间,其值会被重新初始化。如果想使局部变量的值在程序的整个生命期里仍然存在,我们可以定义函数的局部变量为static(静态的),并给它一个初始化。初始化只在函数第一次调用时执行,函数调用之间变量的值保持不变,这种方式,函数可以“记住”函数调用之间的一些信息片断。

    我们可能奇怪为什么不使用全局变量。static变量的优点是在函数范围之外它是不可用的,所以它不可能被轻易改变。这会使错误局部化。

    外部变量

    extern告诉编译器存在着一个变量和函数,即使编译器在当前的文件中没有看到它。这个变量或函数可能在一个文件或者在当前文件的后面定义。例如extern int i;编译器会知道i肯定作为全局变量存在于某处。当编译器看到变量i的定义时,并没有看到别的声明,所以知道它在文件的前面已经找到了同样声明的i 。

    常量

    const告诉编译器这个名字表示常量,不管是内部的还是用户定义的数据类型都可以定义为const。如果定义了某对象为常量,然后试图改变它,编译器将会产生错误。在C++中一个const必须有初始值。

    volatile变量

    限定词const告诉编译器“这是不会改变的”(这就是允许编译器执行额外的优化);而限定词volatile则告诉编译器“不知道何时变化”,防止编译器依据变量的稳定性作任何优化。

    参考《Thinking in C++》第一卷第三章

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

    Static 作用详述

    1.先来介绍它的第一条也是最重要的一条:隐藏

         当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c.

    下面是a.c的内容:

     char a = 'A'; // global variable
                void msg()
                {
                printf("Hello\n");
                }
                

    下面是main.c的内容:

     int main(void)
                {
                extern char a; // extern variable must be declared before use
                printf("%c ", a);
                (void)msg();
                return 0;
                }
                

    程序的运行结果是:

    A Hello

         你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见 性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。

    如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上 static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变 量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。

    2. static的第二个作用是保持变量内容的持久

         存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和 全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。虽然这种用法不常见,但我还是举一个例子。

     #include <stdio.h>
                int fun(void){
                static int count = 10; // 事实上此赋值语句从来没有执行过
                return count--;
                }
                int count = 1;
                int main(void)
                {
                printf("global\t\tlocal static\n");
                for(; count <= 10; ++count)
                printf("%d\t\t%d\n", count, fun());
                return 0;
                }

    程序的运行结果是:

    global local static
    1  10
    2   9
    3   8
    4   7
    5   6
    6   5
    7   4
    8   3
    9   2
    10  1

    3. static的第三个作用是默认初始化为0.其实全局变量也具备这一属性,因为全局变量也存储在静态数据区

         在静态 数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0, 然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加‘\0’ 太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是‘\0’。不妨做个小实验验证一下。

    #include <stdio.h>
                int a;
                int main(void)
                {
                int i;
                static char str[10];
                printf("integer: %d; string: (begin)%s(end)", a, str);
                return 0;
                }
                

    程序的运行结果如下integer: 0; string: (begin)(end)

    最后对static的三条作用做一句话总结。首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0.

    4. 用static声明的函数和变量小结

    static 声明的变量在C语言中有两方面的特征:

     

     

    1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
    2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

     
    Tips:
    A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
    B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
    C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
        D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
          E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

        函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

    扩展分析:

          术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。

    全局变量、静态全局变量、静态局部变量和局部变量的区别

    变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。


             

    存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区
              按作用域分,  全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效

        全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

    从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

    static 函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

    static全局变量与普通的全局变量有什么区别:static全局变量只初始化一次,防止在其他文件单元中被引用;
    static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
        static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
        全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。

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

     C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。

    一、面向过程设计中的static

    1、静态全局变量

    在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: 

    //Example 1

    #include <iostream.h>

    void fn();

    static int n; //定义静态全局变量

    void main()

    {

     n=20;

     cout<<n<<endl;

     fn();

    }

    void fn()

    {

     n++;

     cout<<n<<endl;

    }

    静态全局变量有以下特点:  

    ·                                

    1 该变量在全局数据区分配内存;  

    ·                                

     未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);  

    ·                                

     静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;   

    静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图:
       

    代码区

    全局数据区

    堆区

    栈区

      一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。细心的读者可能会发现,Example 1中的代码中将 

     static int n; //定义静态全局变量

    改为 

     int n; //定义全局变量

    <span http:="" my.oschina.net="" alphajay="" blog="" 5508"="" title="上一篇:Libnet核心数据结构" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: 宋体; ">« Libnet核心数据结构



    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

    static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
    static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
    static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。

    展开全文
  • 在学习C++过程中,经常看到这么一个说法:“命名空间作用域下的....”,其实C++的作用域(以前一直都是认为只是参数的有效范围)一直都在用,但系统的划分可能却没划分过,因此,将C++的作用域划分记录在此。

    在学习C++过程中,经常看到这么一个说法:“命名空间作用域下的....”,其实C++的作用域(以前一直都是认为只是参数的有效范围)一直都在用,但系统的划分可能却没划分过,因此,将C++的作用域划分记录在此。

    1.作用域

    所谓作用域,即一个标志符在程序中起作用的区域。在C++中,作用域被细致的划分为函数原型作用域、局部作用域、类作用域、命名空间作用域

    1.1函数原型作用域

    函数原型作用域是C++最小的作用域,在函数原型声明时形式参数的作用范围就是函数原型作用域。

    例如,有如下函数声明:

     double area (double radius);

    标识符radius的作用(或称有效)范围就在函数area形参列表的左右括号之间,在程序的其他地方不能引用这个标识符。因此标识符radius的作用域称做函数原型作用域。

    1.2局部作用域

    所谓局部作用域,是指在某一局部内生效。如下图:

    局部作用域示意图

     如上所示,在函数fun的形参列表中声明了形参a,在函数体内声明了变量b,并用a的值初始化b,接下来在if语句内声明了c。在这里,a,b,c都是具有局部作用域,其作用域从声明处开始,一直到声明所在的块结束的大括号为止,具有局部作用域的变量也称为局部变量。

    1.3类作用域

    类可以被看成是一组成员的集合,类X的成员m具有类作用域,对m的访问方式有如下3种:

    1.如果在类X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以直接访问成员m。如果声明了,则局部作用域标识符会优于成员m的标识符。

    2.通过表达式:(类X实例化对象)x.mX::m,第一种是通过对象访问数据成员,第二种是m为类X的静态数据成员访问方式。需要注意的是:如果类的对象在类外部是不能直接访问私有数据成员的,只能通过成员函数访问,但是,如果是在类内部是可以访问的。如以下代码是合法的:

    template <class T>
    class MyClass
    {
     private:
        T value;
     public:
        void assign(const MyClass<T>& x)
        {
            value=x.value;
        }
        ......
    };

     3.通过ptr->m这样的表达式,其中ptr为指向类X的一个对象的指针。

    1.4命名空间作用域

    凡是在命名空间namespace name{}之内定义的,且不属于上述各个作用域的,都属于是命名空间作用域

    我们常常在代码中命名一些全局变量。也经常说他是写在了命名空间内,但是也没见我们用namespace 名字{}把他包含在内啊?这是怎么回事呢?在这里就要说两个特殊的命名空间作用域:

    1.4.1全局命名空间:

    全局命名空间是默认的默认命名空间,在显示声明的命名空间之外的声明都是默认声明到了一个全局命名空间中了,这也就解释了我们为什么经常没写namespace却也说某个变量是定义在了命名空间内的原因。

    1.4.2匿名命名空间:

    匿名命名空间是没有name名字的命名空间,其作用是在以下的外部变量和函数中说明。

    2.外部变量和外部函数

    外部变量和外部函数是指不仅可以在定义它的源文件内使用,还允许其在其他文件中使用。

    需要指出的1:在命名空间作用域中的变量和函数,默认都是外部的。其他文件想要使用外部变量或者外部函数,只需要加上关键字extern声明下即可。

    需要指出的2:外部变量和函数可以有多处声明,但是其定义性的声明只能是唯一的,即不允许重复定义。

    从上面所示,我们得知,全局命名空间作用域中的变量和函数,默认情况下也是外部的,比如我们在一个主函数文件中定义了一个全局变量,全局函数,虽然我们没有将其定义在namespace name{},但因其是在默认的全局命名空间作用域内也是一种命名空间作用域,故其默认是允许其他cpp文件声明后使用的。

    既然是默认允许其他文件使用,但如果我只想在我本文件内使用不想被其他文件使用呢?这种情况还是存在的,比如出于安全性考虑,我们不希望将一个我们确信只会在本文件内使用的内部变量或函数暴露给其他文件,或者在默认命名空间下的文件声明的一些函数和变量怕被其他文件调用后重名,这时候我们就想要将这些变量和函数限定在本文件内,就可以采用匿名命名空间的方式。

    如1.4.2所示,匿名命名空间是指没有name的命名空间,其定义形式如下:

    namespace

    {

         //此处定义的一些函数和变量便不会被外部访问

    }

    展开全文
  • 2、作用域较小的局部变量隐藏作用域较大的局部变量 例如:上图里的运算结果: 此时 int x = 1, y = 1;作用域较小会隐藏 x = 0, y = 0;的作用域。 全局变量静态储存) 从此程序开始到此程...
  • 存放在全局数据区的变量的生存周期存在于整个程序运行期间,而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁,除了静态变量之外的局部变量都存放于栈中。作用域: 变量的可见代码域(块作用域,函数作用域...
  • 外部变量和静态变量

    千次阅读 2013-12-05 20:08:31
     外部变量是在函数外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的结尾。在此作用域内,全局变量可为各个函数所引用。编译时将外部变量分配在静态存储区。有时需要在其他文件中使用extern来...
  • 1. 变量作用域静态 变量; 1) 变量作用域变量作用域也称变量的范围,变量的范围即它定义的上下文背景(也是它的生效范围)。大部分的PHP变量只有一个单独的范围。这个单独的范围跨度同样包含了 ...
  • 静态变量的生存期和作用域

    千次阅读 2016-12-18 16:08:19
    静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。...
  • 存放在全局数据区的变量的生存周期存在于整个程序运行期间,而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁,除了静态变量之外的局部变量都存放于栈中。 作用域: 变量的可见代码域(块作用域,函数作用...
  • 需要注意的是该static变量的作用域,它的作用域是在定义该变量的.m文件范围内。  和c++不同,objective c不支持类静态成员变量(也就是不支持class variables),通常的做法是在class之外定义静态变量来代替。 ...
  • 标识符的作用域 标识符的作用域是指某种标识符的作用范围。在C++中出现的各种标识符,具有不同的作用域作用域规则 总体规则:标识符只能在说明它或定义它的范围内是可见的,而在该范围之外是不可见的。 解释: ...
  • 全局变量和静态变量的存储方式是一样的,只是作用域不同。如果它们未初始化或初始化为0则会存储在BSS段,如果初始化为非0值则会存储在DATA段,见进程的地址空间分配一文。静态变量作用域是当前源文件,全局变量的...
  • Javascript变量作用域、变量提升

    千次阅读 2017-09-19 08:18:31
    Javascript变量变量提升以及作用域 执行环境对js编程的重要性不容忽视,理解其执行的原理,将有效提升编程素养。
  • java变量作用域和堆栈

    2016-07-09 14:47:46
    一、作用域决定了变量的可见性和生命周期,java中变量分为成员变量和局部变量,如下: 1.成员变量:在类的所有方法外部声明的变量,即类所拥有的变量,可以被系统初始化。 1.1静态成员变量:类被加载时被创建...
  • 区分静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)变量的分类来看 静态变量、动态变量、内部变量(局部变量)、外部变量(全局...
  • 一、静态变量: 在了解静态变量之前,读者需要知道什么是全局变量和局部变量。局部变量直至定义在函数内部的变量,在函数调用结束后,局部变量将消失。全局变量是指在函数体外定义的变量,它的生命期随着程序的结束...
  • Swoole 关于变量作用域的问题

    千次阅读 2017-04-05 23:25:49
    Swoole 对性能提升很大, 但目前看来官方手册还非常不完善, 只能自己一个个慢慢测试啦这次测试的问题是关于 swoole server 中的回调函数使用变量作用域的问题先说下大致的总结, 如果存在不正确的地方请务必留言告诉...
  • JS的解析原理和变量作用域

    千次阅读 2016-10-16 20:28:46
    从词法作用域和词法环境的角度深层次阐述了JS解析原理和变量作用域
  • 在Java中,变量的作用域分为四个级别:类级、对象实例级、方法级、块级。   类级变量又称全局级变量或静态变量,需要使用static关键字修饰。类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不...
  • php变量作用域

    千次阅读 2012-12-17 14:22:39
    对于初学者来说,变量作用域是它们所驻留的页面。因此,如果你定义了 $var,页面余下部分就可以访问 $var,但是,其它页面一般不能访问它(除非使用特殊的变量)。  因为包含文件像它们是原始(包含)脚本的一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,317
精华内容 34,926
热门标签
关键字:

外部静态变量的作用域