精华内容
下载资源
问答
  • 静态局部变量:静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终...

    点击打开链接

    对象指针的指向原则是:小-->大,父类指向子类。

    函数指针刚好相反,子类的函数指针可以指向父类,但是父类的函数指针不能指向子类。

    在创建派生类对象时,构造函数的执行顺序:基类构造函数、对象成员构造函数、派生类本身构造函数。


    静态成员函数不含this指针。

    静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问。

    类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数

    在创建派生类对象时,构造函数的执行顺序:基类构造函数、对象成员构造函数、派生类本身构造函数。

    局部变量:局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。

    全局变量:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。

    静态局部变量:静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

    静态全局变量:静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。


    标识符:函数名、数据名等都是标识符。标识符可以由字母、下划线、数字组成,必须以字母或下划线开头。关键字不能作为标识符。

    数组表示:

    结构体:

    struct 结构体类型名
    {
    成员类型 成员名;
    };

    指针结构体指针变量只有初始化后才可以使用。

    函数模板:

    template <类型形式参数表>
    返回类型 函数名(形式参数表)
    {
    函数体;
    }
    展开全文
  • #include <stdio.h> const int A = 10; int a = 20; static int b = 30; int c; int main(void) { static int a = 40;...作用域(Scope)这个概念适用于所有标识符,而不仅仅是变量,C语言的作用域.
    #include <stdio.h>
    
    const int A = 10;
    int a = 20;
    static int b = 30;
    int c;
    
    int main(void)
    {
    	static int a = 40;
    	char b[] = "Hello world";
    	register int c = 50;
    
    	printf("Hello world %d\n", c);
    
    	return 0;
    }

    作用域(Scope)这个概念适用于所有标识符,而不仅仅是变量,C语言的作用域分为以下几类:

    函数作用域(Function Scope),标识符在整个函数中都有效。只有语句标号属于函数作用域。标号在函数中不需要先声明后使用,在前面用一个goto语句也可以跳转到后面的某个标号,但仅限于同一个函数之中。

    文件作用域(File Scope),标识符从它声明的位置开始直到这个程序文件的末尾都有效。例如上例中main函数外面的Aabc,还有main也算,printf其实是在stdio.h中声明的,被包含到这个程序文件中了,所以也算文件作用域的。

    块作用域(Block Scope),标识符位于一对{}括号中(函数体或语句块),从它声明的位置开始到右}括号之间有效。例如上例中main函数里的abc。此外,函数定义中的形参也算块作用域的,从声明的位置开始到函数末尾之间有效。

    标识符的链接属性(Linkage)

    外部链接(External Linkage),如果最终的可执行文件由多个程序文件链接而成,一个标识符在任意程序文件中即使声明多次也都代表同一个变量或函数,则这个标识符具有External Linkage。具有External Linkage的标识符编译后在符号表中是GLOBAL的符号。例如上例中main函数外面的acmainprintf也算。

    内部链接(Internal Linkage),内部链接常指一个程序文件中全局变量,可以被程序文件内各个子程序访问,这在编译过程中处理,和link阶段不发生关系。如果变量前加了static,那么它永远不会被外部程序访问,它不会被编译程序写入目标代码的链接区。例如上例中main函数外面的b。如果有另一个foo.c程序和main.c链接在一起,在foo.c中也声明一个static int b;,则那个b和这个b不代表同一个变量。具有Internal Linkage的标识符编译后在符号表中是LOCAL的符号,但main函数里面那个a不能算Internal Linkage的,因为即使在同一个程序文件中,在不同的函数中声明多次,也不代表同一个变量。

    无链接(No Linkage)。除以上情况之外的标识符都属于No Linkage的,例如函数的局部变量,以及不表示变量和函数的其它标识符。

    存储类修饰符(Storage Class Specifier)有以下几种关键字,可以修饰变量或函数声明:

    static,用它修饰的变量的存储空间是静态分配的,用它修饰的文件作用域的变量或函数具有Internal Linkage。

    register,编译器对于用register修饰的变量会尽可能分配一个专门的寄存器来存储,但如果实在分配不开寄存器,编译器就把它当auto变量处理了,register不能修饰文件作用域的变量。现在一般编译器的优化都做得很好了,它自己会想办法有效地利用CPU的寄存器,所以现在register关键字也用得比较少了

    extern,上面讲过,链接属性是根据一个标识符多次声明时是不是代表同一个变量或函数来分类的,extern关键字就用于多次声明同一个标识符,下一章再详细介绍它的用法

    typedef,在“sizeof运算符与typedef类型声明”一节讲过这个关键字,它并不是用来修饰变量的,而是定义一个类型名。在那一节也讲过,看typedef声明怎么看呢,首先去掉typedef把它看成变量声明,看这个变量是什么类型的,那么typedef就定义了一个什么类型,也就是说,typedef在语法结构中出现的位置和是面几个关键字一样,也是修饰变量定义的,所以从语法(而不是语义)的角度把它和前面几个关键字归类到一起

    变量的生存期(Storage Duration,或者Lifetime)分为以下几类

    静态生存期(Static Storage Duration),具有外部(GLOBAL)或内部(LOCAL)链接属性,或者被static修饰的变量,在程序开始执行时分配和初始化一次,此后便一直存在直到程序结束。这种变量通常位于.rodata.data.bss段,例如上例中main函数外的Aabc,以及main函数里的a

    自动生存期(Automatic Storage Duration),链接属性为无链接并且没有被static修饰的变量,这种变量在进入块作用域时在栈上或寄存器中分配,在退出块作用域时释放。例如上例中main函数里的bc。

    动态分配生存期(Allocated Storage Duration),以后会讲到调用malloc函数在进程的堆空间中分配内存,调用free函数可以释放这种存储空间




    全局变量

    定义在所有函数外部的变量称之为全局变量。全局变量可以在任意地方使用。

    局部变量

    定义在函数内部的变量称之为局部变量。局部变量只能在所定义的函数函数内部中使用。

    静态变量

    静态变量的存放地址,在整个程序运行期间都不发生改变。全局变量都是静态变量,用'static'修饰的局部变量也是静态变量。未初始化的静态变量将被编译器初始化为0.

    标识符的作用域

    标识符变量名、函数名、类型名统称为标识符。标识符起作用的范围称之为标识符的作用域。

    单文件的程序中,结构、函数和全局变量的作用域是其定义所在的整个文件。

    函数形参的作用域是整个函数。

    局部变量的作用域,是所在的语句块,即{............}中的内容。

    同名标识符的作用域,可能一个被另一个包含。则在小的作用域中,作用域大的那个标识符被屏蔽,不起作用。

    变量的生存期

    全局变量(静态变量)的生存期,从程序开始到整个程序的结束。

    静态局部变量的的生存期,从定义它语句的第一次执行开始,到整个程序的结束。

    函数形参的生存期,从函数执行开始,到函数返回时结束。

    非静态局部变量的生存期,从执行到定义它的语句开始,一旦执行到其作用于外,生存期便终止。

    展开全文
  • 为形参提供默认值是以前的一种流行方法: function foo(a){ a=a||1; console.log(a); } foo(); // 1 foo(12); // 12 你看,如果函数调用时不...形参本身是局部变量,只能在函数内访问: functio...

    为形参提供默认值是以前的一种流行方法:

    function foo(a){
        a=a||1;
        console.log(a);
    }
    
    foo();     // 1
    foo(12);  // 12

    你看,如果函数调用时不提供实参,形参a会被赋1。另:最好不要修改形参,参见竟然修改形参有这么可怕的后果

    形参本身是局部变量,只能在函数内访问:

    function foo(a){
        console.log(a);
    }
    
    foo(12);   // 12
    
    console.log(a);  // Uncaught ReferenceError: a is not defined

    你可以在控制台看到:

    比如,你可以这样:

    function foo(){
        a='lala';
    }
    
    foo();
    
    console.log(a);  // lala

    引擎在foo函数的作用域和全局作用域找不到名为a的变量,在非严格模式下就会在全局作用域创建一个名为a的全局变量,此时如果为函数添加名为a的形参就可以

    阻止这种事情发生:

    function foo(a){
        a='lala';
    }
    
    foo();
    
    console.log(a);  // Uncaught ReferenceError: a is not defined

    因为引擎已经在函数的作用域内找到了名为a的变量,所以不会在全局作用域创建名为a的全局变量,此时,如果再在函数内声明名为a的变量就已经是重复声明了:

    function foo(a){
        var a='lala';
        console.log(a);
    }
    
    foo();  // lala

    此时JShint等代码检查工具就会警告:

    虽然JS的重复声明会被引擎忽略,但不建议这么做。

    最后,我真想吐槽博客园的光标,特么的怎么总是莫名其妙跳到别处!害得总是修改原来写好的代码!

    以上。

    转载于:https://www.cnblogs.com/linweinb/p/8728034.html

    展开全文
  • 程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的 作用域不同而不会发生语法错误,但会使人误解。 1 #include <iostream> 2 3 const int MAX=5; 4 /* run this program using the...

    程序中不要出现标识符完全相同的局部变量和全局变量,尽管两者的 作用域不同而不会发生语法错误,但会使人误解。

     

     1 #include <iostream>
     2 
     3 const int MAX=5; 
     4 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
     5 using namespace std;
     6       //假定栈中最多保存5个数据
     7 
     8 //定义名为stack的具有栈功能的类
     9 class  stack {
    10     //数据成员
    11     double  num[MAX];   //存放栈数据的数组
    12     int  top;             //指示栈顶位置的变量
    13 public:
    14     //成员函数
    15     stack(char *name)  //构造函数
    16     {
    17         top=0; 
    18         cout<<"Stack "<<name<<" initialized."<<endl;
    19     }
    20     ~stack(void)   //析构函数
    21     {
    22         cout << "Stack destroyed." << endl;  //显示信息
    23     }
    24 
    25     void push(double x)    //入栈函数
    26     {
    27         if (top==MAX){
    28             cout<<"Stack is full !"<<endl;
    29             return;
    30         };
    31         num[top]=x;
    32         top++;
    33     }
    34     double pop(void)     //出栈函数
    35     {
    36         top--;
    37         if (top<0){
    38         cout<<"Stack is underflow !"<<endl;
    39         return 0;
    40         };
    41         return num[top];
    42     }
    43 };
    44 
    45 
    46 int main(int argc, char** argv) {
    47         double x;
    48     //声明(创建)栈对象并初始化
    49     stack a("a"),b("b");    
    50 
    51     //以下利用循环和push()成员函数将2,4,6,8,10依次入a栈
    52     for (x=1; x<=MAX; x++)
    53         a.push(2.0*x);
    54 
    55     //以下利用循环和pop()成员函数依次弹出a栈中的数据并显示
    56     cout<<"a: ";
    57     for (int i=1; i<=MAX; i++)
    58        cout<<a.pop()<<"  ";
    59     cout<<endl;
    60 
    61     //从键盘上为b栈输入数据,并显示
    62     for (int i=1;i<=MAX;i++) {
    63 
    64         cout<<i<<" b:";
    65         cin>>x;
    66         b.push(x);
    67     }
    68     cout<<"b: ";
    69     for(int i=1;i<=MAX;i++) 
    70        cout<<b.pop()<<" ";
    71     cout<<endl;
    72     return 0;
    73 }

     

    转载于:https://www.cnblogs.com/borter/p/9413405.html

    展开全文
  • //成员变量和局部变量可重名 标识符 用来给类,变量,方法等起名的符号 组成:a-z A-Z 0-9 _ $ 各个国家的文字(后两个不建议使用) 规定: 不允许使用单独的下画线(_)作为标识符 合法性: 首尾不能是数字 不能为...
  • **变量:**可变的量,从计算机的角度解释变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。...局部变量:方法或语句块内部定义的变量 成员变量:方法外部、类的内部定义的变量 标识符: Ja...
  • 局部变量:方法或语句块内部定义的变量(比如:main方法里定义的变量) 成员变量:方法外部、类的内部定义的变量(比如:定义在main方法之外,class类内的变量) 注意:类的外面不能有变量的声明 二、数据...
  • Java变量标识符

    2017-10-26 00:32:53
    Java变量局部变量定义在方法体内的变量,其生命周期只在方法内。 在方法、构造方法或者语句块中定义的变量成为局部变量;变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。类变量静态变量,只属于类 ...
  • 1.变量  概述:就是一个容器,用于存储数据的  语法:  1.声明的同时直接赋值  数据类型 变量名 = 值;  String name = "我是程序员";  2.先声明后赋值  声明: 数据类型 变量名; String...
  • 局部变量 定义在方法体内的变量,其生命周期只在方法内。 在方法、构造方法或者语句块中定义的变量成为局部变量;变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。 类变量 静态变量,只属于类 类...
  • #inclue<stdio.h> int i=1; int main(int argc,char **argv) { int i = i; printf("i=%d\n",i); return 0; }
  • package Stringlei; /* ...*@version Create time : 2019年3月22日下午5:07:41 *说明: 放在方法外 类里面 的变量 是成员变量 * 放在方法里面的是局部变量 */ public class Bianliang { int a = 20;//成员...
  • 在C++中,我们经常难以说清楚全局变量、局部变量和静态局部变量的区别。本博客从变量存储特性和标识符作用域两个角度区分这三个变量。 首先,我们来看看C++程序的内存区域是如何分配的。 从上图,我们可以看到,...
  • SQL局部变量

    千次阅读 2017-02-24 16:16:31
    局部变量名必须是以@开头,要符合标识符的命名规则。 2.局部变量的赋值: 用SET或SELECT语句为局部变量赋值。 SET 局部变量名=表达式 SELECT 局部变量名=表达式 【后面可以用逗号连接n个】 3.变量值的输出,用...
  • 全局、静态、new产生的变量都在堆中,动态分配的变量在堆中分配,局部变量在栈里面分配。函数中声明的变量在栈中,用了new标识符在堆中,全局变量和static变量在全局区。程序为栈变量分配动态内存,在程序结束为栈...
  • 目录 Java程序的标识符和关键字 java核⼼基础知识之修饰符和使⽤场景 Java核⼼基础之数据类型 java核⼼基础之数组 ...什么是标识符:java程序的组成,⽐如类名、⽅法名、变量名等 注意点: 标识符...
  • 1.标识符命名规则: 定义 就是给类,接口,方法,变量等起名字的字符序列 组成规则 英文大小写字母数字$和_ 注意事项 不能以数字开头标识符必须是由字母下划线开头的字母下划线数字组合 2.以下不正确的...
  • 成员变量和局部变量

    2017-03-29 17:33:55
    在Java语言中,根据定义变量位置的不同。...不管是成员变量,还是局部变量,都应该遵守相同的命名规则:从语法角度来看,只要是一个合法的标识符即可,但从程序可读角度来看,应该是多个有意义的单词连缀而
  • 变量 注意 每个变量都有类型,类型可以是基本类型,也可以是引用类型 变量名必须是合法都标识符 ...局部变量的写法 public class Day_01{ public static void main(String[] args){ int i = 10;
  • 3.局部变量能否和成员变量重名? A.可以,局部变量可以与成员变量重名,这时可用“this”来指向成员变量 B.可以,这时可用“local”...局部变量可以和成员变量相同,使用标识符调用时,优先使用局部变量。在实...
  • 局部变量和成员变量

    2018-11-24 06:13:17
    变量的定义:  程序在运行时,系统要给程序分配内存用来存储各种类型的数据,内存中存储的数据必须要有一个标识符进行标识,而且内存中存储的数据是...局部变量: 1.在方法中或者游离块中定义的变量, 只在方法体...
  • 全局变量和局部变量 全局变量的作用域是**整个程序**。 局部变量的作用域就是定义它的那个函数,如果此**函数结束运行**,那么这个局部变量就会被**销毁**。 语句块变量就是一个{}里面的变量。ps:语句块主要是一...
  • c#成员变量和局部变量

    千次阅读 2012-09-12 22:23:24
    在方法内部可以定义变量,被称为局部变量局部变量的一般形式如下 [变量修饰符] 变量类型 变量名; 变量修饰符可以是final,表示这是常量。 变量类型可以是Java中任意合法的基本类型或复合类型。 ...
  • 来源:公众号【编程珠玑】作者:守望先生前言这些是编程语言中的基本...作用域C语言中,作用域用来描述标识符能够被哪些区域访问。而常见作用域有以下几种:块作用域,可见范围是从定义处到包含该定义的块结尾函数作...
  • 在方法内部可以定义变量,被称为局部变量局部变量的一般形式如下 [变量修饰符] 变量类型 变量名; 变量修饰符可以是final,表示这是常量。 变量类型可以是Java中任意合法的基本类型或复合类型。 ...
  • 在方法内部可以定义变量,被称为局部变量局部变量的一般形式如下 [变量修饰符] 变量类型 变量名; 变量修饰符可以是final,表示这是常量。 变量类型可以是Java中任意合法的基本类型或复合类型。 变量名是用户...
  • JDK10 可以使用var作为局部变量类型推断标识符 Local-Variable Type Inference(局部变量量类型推断),顾名思义只能用做为局部变量 注意 仅适用于局部变量量,如 增强for循环的索引,传统for循环局部变量 不能...
  • 局部变量 定义在方法体内的变量,其生命周期只在方法内。 在方法、构造方法或者语句块中定义的变量成为局部变量;变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。 类变量 静态变量,只属于类 ...

空空如也

空空如也

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

局部变量标识符