精华内容
下载资源
问答
  • 内存变量详解

    千次阅读 2013-10-24 23:19:30
    内存变量   1. 静态局部变量 以static标示 可分为静态局部变量和静态全局变量。 静态局部变量属于静态存储方式,它具有以下特点:  (1)静态局部变量在函数内定义,但不像自动变量那样,当调用时就存在,...

    内存变量

     

    1. 静态局部变量

    static标示 可分为静态局部变量和静态全局变量。

    静态局部变量属于静态存储方式,它具有以下特点:
     (1)静态局部变量在函数内定义,但不像自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。
     (2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
     (3)允许对构造类静态局部量赋初值。,则由系统自动赋以0值。
      (4)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

    void f()

    {

     static int i;

     i++;

     cout<<i<<endl;

    }

    int main()

    {

    for(int i=0;i<4;i++)

    {

    f();

    }

    getchar();

    return 0;

    }

    2. 静态全局变量

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

    Tips:

      A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;

      B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;

      C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;

        D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带内部存储器功能的的函数)

       E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针(因为此时该指针已经被释放)

    Example:

    3. 类中static的使用方法

    static的优势:

        可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的 值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。引用静态数据成员时,采用如下格式:

        <类名>::<静态成员名>

        如果静态数据成员的访问权限允许的话(public的成员),可在程序中,按上述格式

    来引用静态数据成员。

    ps:

    (1). Static 成员是类的组成部分但不是对象的组成部分,没有this指针。、

    (2) static成员函数只能直接访问static成员,但不能访问非statci成员,不能声明为const,也不能声明为虚函数,

    为什么static成员函数不能为const

    const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall而类中的static函数本质上是全局函数,调用规约是__cdecl__stdcall,不能用const来修饰它

    (3 )Static数据成员必须在类的外部定义,不能通过类的构造函数初始化, 应该在定义时初始化,并且static关键字只能用于类定义体的内部声明,

    (5)static并没有增加程序的时空开销,相反她还缩短了子类对父类静态成员的访问时间,节省了子类的内存空间。

    (6)静态数据成员在<定义或说明>时前面加关键字static

    (7)静态数据成员是静态存储的,所以必须对它进行初始化。

    (8)静态成员初始化与一般数据成员初始化不同: <数据类型><类名>::<静态数据成员名>=<>

    class Sales_item{

    public:

    static int total;

    static void newObject();

    double revenue;

    explicit Sales_item(double a):revenue(a)

    {}

    void display();

    };

    int Sales_item::total=10;

    void Sales_item::newObject()

    {

     // revenue++;

    total++;

    }

    void Sales_item::display()

    {

    //cout<<this->revenue<<endl;

    Sales_item::newObject();

    cout<<Sales_item::total<<endl;

    }

    int main()

    Sales_item  *a=new Sales_item(23.3);

    a->display();

    getchar(); 

    return 0;

    }

    特殊的整型const static 成员

    Const static数据成员可以在类的定义体中进行初始化

    const static int total=10;

    Staic 成员不能在类内初始化,如果想初始化的话应该在类外,或者定义成const static.

    【转】全局变量静态变量

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

     

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

     

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

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

               按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。

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

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

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

     

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

     

      static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

      static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

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

            全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。

    4. 寄存器变量

      上述各类变量都存放在存储器内, 因此当对一个变量频繁读写时,必须要反复访问内存储器,从而花费大量的存取时间。 为此,C语言提供了另一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写, 这样可提高效率。寄存器变量的说明符是register 对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量。

    ∑200i=1imain()

    {

    register i,s=0;

    for(i=1;i<=200;i++)

    s=s+i;

    printf("s=%d\n",s);

    本程序循环200次,is都将频繁使用,因此可定义为寄存器变量。对寄存器变量还要说明以下几点:

      1. 只有局部自动变量和形式参数才可以定义为寄存器变量。因为寄存器变量属于动态存储方式。凡需要采用静态存储方式的量不能定义为寄存器变量。

    5. 几种变量的区别

    1. static有什么用途?(请至少说明两种)

    1.限制变量的作用域

    2.设置变量的存储域

    3. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

    全局变量储存在静态数据库,局部变量在堆栈

    9、局部变量能否和全局变量重名?

    答:能,局部会屏蔽全局。要用全局变量,需要使用"::"

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

     

    10、如何引用一个已经定义过的全局变量?

    答:extern

    可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错

     

    11、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

    答:可以,在不同的C文件中以static形式来声明同名全局变量。

    可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错

     

    14static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

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

    由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

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

     

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

     

    static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

     

    static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

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

    展开全文
  • java变量两种类型

    千次阅读 2019-01-24 16:09:59
    首先要明白为什么需要数据类型? 数据类型在计算机语言中,是对内存位置的一个抽象的表达方式。...java中的变量分为两种类型 - 基本类型 int、float、double、boolean、char… 不具备对象的特性(不...

    首先要明白为什么需要数据类型?
    数据类型在计算机语言中,是对内存位置的一个抽象的表达方式。不同类型的变量在内存中分配的字节数不同,同时存储方式也是不同的。所以给变量赋值前需要先确定变量的类型,即确定了数据需分配内存空间的大小,数据在内存的存储方式
    JAVA是强类型语言。

    java中的变量分为两种类型

    - 基本类型

    int、float、double、boolean、char…
    不具备对象的特性(不能调用方法、功能简单)
    直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面

    为了让基本数据类型也具备对象的特性,JAVA为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。

    基本类型和包装类之间的对应关系
    在这里插入图片描述
    可以这么记:
    int——>Integer
    char——>Character
    其他——>字母不变(首字母小写变大写)

    包装类主要提供了两大类方法

    • 将本类型和其他基本类型进行转换的方法
    • 将字符串和本类型及包装类互相转换的方法

    Integer包装类的常用方法
    包装类——>基本数据类型在这里插入图片描述

    基本类型和包装类之间的转换

    在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。

    Integer a = new Integer(3);     //定义Integer包装类对象,值为3
    int b = a + 5;            //将对象和基本类型进行运算
    

    装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱

    int i = 10;           //定义一个int基本类型值
    Integer x = new Integer(i);                //手动装箱
    Integer y = i;                        //自动装箱
    

    拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱

    Integer j = new Integer(8);           //定义一个Integer包装类对象,值为8
    int m = j.intValue();          //手动拆箱为int类型
    int n = j;                        //自动拆箱为int类型
    

    基本类型和字符串之间的转换

    基本类型转换为字符串有三种方法:
    1.使用包装类的toString()方法
    2.使用String类的valueOf()方法
    3.用一个空字符串加上基本类型

    int c =10;            //基本数据类型
    String str1 = Integer.toString(c);           //方法1
    String str2 = String.valueOf(c);            //方法2
    String str3 = c + " ";                             //方法3
    

    字符串转换成基本类型有两种方法
    1.调用包装类的parseXXX静态方法
    2.调用包装类的valueOf()方法转换为基本类型的包装类,会自动拆箱

    String str = "8";
    int d  = Integer.parseInt(str);            //方法1
    int  e = Integer.valueOf(str);            //方法2
    

    注意:
    parseInt(String s) 是把字符串——>基本数据类型 (返回int(以整型为例))
    valueOf(String s) 是把字符串——>包装类对象 (返回Integer(以整型为例))

    int  e = Integer.valueOf(str); 
    

    虽然valueOf(str)将字符串——>包装类对象,但是JAVA会自动拆箱,使其转换为基本类型。

    .valueOf前面是什么就转成什么类型

    - 引用类型

    继承于Object类, 是一个对象类型。
    按照Java里面存储对象的内存模型来进行数据存储的,使用内存堆和内存栈进行数据存储。
    引用存储在有序的内存栈上的
    对象本身的值存储在内存堆上的

    基本数据类型和引用类型的主要区别
    基本数据类型只有一块存储空间(分配在stack中)
    引用类型有两块存储空间(一块在stack中,一块在heap中)

    在这里插入图片描述
     在上图中引用类型在传参时不是在heap中再分配一块内存来存变量c 所指向的A(),而是让a 指向同一个A 的实例,这就与C++ 中的指针一样,先声明指针变量a,b,c,d 在传参的时候让a 指向c所指向的内存,让 d 指向 b 所指向的内存。很明显Java中的引用与C++中的指针在原理上是相类似的,但记住Java没有指针,只有引用。

    • 简单类型是按值传递
      Java 方法的参数是简单类型的时候,是按值传递的 。
      以参数形式传递简单类型的变量时,实际上是将参数的值作了一个拷贝传进方法函数的,那么在方法函数里再怎么改变值,其结果都只是改变了拷贝的值,而不是原值
      所以像swap(a,b)的例子,传进简单类型是不会交换的,只是把参数的副本进行了交换,原值还是不变。

    • 引用
      引用其实就像是一个对象的名字或者别名。
      一个对象在内存中会请求一块空间来保存数据,根据对象的大小,它可能需要占用的空间大小也不等。访问对象的时候,我们不会直接是访问对象在内存中的数据,而是通过引用去访问引用也是一种数据类型,我们可以把它想象为类似 C++ 语言中指针的东西,它指示了对象在内存中的地址——只不过我们不能够观察到这个地址究竟是什么。
      如果我们定义了不止一个引用指向同一个对象,那么这些引用是不相同的,因为引用也是一种数据类型,需要一定的内存空间(stack,栈空间)来保存。但是它们的值是相同的,都指示同一个对象在内存(heap,堆空间)的中位置。比如:

      String a=“This is a Text!”;

      String b=a;

    在这里插入图片描述
     通过上面的代码和图形示例不难看出,a 和 b 是不同的两个引用,我们使用了两个定义语句来定义它们。但它们的值是一样的,都指向同一个对象 “This is a Text!”。
    注意:String 对象的值本身是不可更改的 (像 b = “World”; b = a; 这种情况不是改变了 “World” 这一对象的值,而是改变了它的引用 b 的值使之指向了另一个 String 对象 a)。

    两个要点

    (1) 引用是一种数据类型(保存在stack中),保存了对象在内存(heap,堆空间)中的地址,这种类型即不是我们平时所说的简单数据类型也不是类实例(对象);

    *(引用类型变量存储在栈内存中,保存的是实际对象在堆内存中的地址,实际对象中保存着内容)

    (2) 不同的引用可能指向同一个对象,换句话说,一个对象可以有多个引用,即该类类型的变量。

    本人原创,如转载请告知,如有问题,请交流!

    展开全文
  • 当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。 堆内存用于存放由new创建的对象和数组...

    在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈存内中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。

    堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。

    展开全文
  • 在http://blog.csdn.net/ns_code/article/details/17288243这篇博文中,讲述了通过... 1、volatile变量是一稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17290021

     

         http://blog.csdn.net/ns_code/article/details/17288243这篇博文中,讲述了通过同步实现内存可见性的方法,在http://blog.csdn.net/ns_code/article/details/17101369这篇博文中,讲述了通过volatile变量实现内存可见性的方法,这里比较下二者的区别。

     

        1、volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。

        2、从内存可见性的角度看,写入volatile变量相当于退出同步代码块,而读取volatile变量相当于进入同步代码块。

        3、在代码中如果过度依赖volatile变量来控制状态的可见性,通常会比使用锁的代码更脆弱,也更难以理解。仅当volatile变量能简化代码的实现以及对同步策略的验证时,才应该使用它。一般来说,用同步机制会更安全些。

        4、加锁机制(即同步机制)既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性,原因是声明为volatile的简单变量如果当前值与该变量以前的值相关,那么volatile关键字不起作用,也就是说如下的表达式都不是原子操作:“count++”、“count = count+1”。

     

         当且仅当满足以下所有条件时,才应该使用volatile变量:

         1、对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。

         2、该变量没有包含在具有其他变量的不变式中。


    总结:在需要同步的时候,第一选择应该是synchronized关键字,这是最安全的方式,尝试其他任何方式都是有风险的。尤其在、jdK1.5之后,对synchronized同步机制做了很多优化,如:自适应的自旋锁、锁粗化、锁消除、轻量级锁等,使得它的性能明显有了很大的提升。

      

     

      

    展开全文
  • js变量存在的两种类型(原始值,引用值) 由于最近面试问到过这个问题,所以特定补一下这里面的知识: 原始值类型:Undefined、Null、Boolean、Number 和 String 型;存储在栈(stack)中的简单数据段,也就是说,...
  • 本文实例讲述了JavaScript变量作用域及内存问题。...ECMAScript变量可能包含两种不同的数据类型的值:基本类型值和引用类型值。基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存
  • android使用全局变量两种方法

    万次阅读 多人点赞 2015-08-25 21:10:17
    转载自:Android之项目全局变量的定义 使用静态类: public class Data{ private static String a ="Hello Android"; public static String getA() { return a; } public static void setA(String a) { Dat
  • C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。1.1局部变量局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。【例1.1
  • Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,...
  • Java的变量大的数据类型?

    千次阅读 2016-08-09 20:42:29
    Java一共8基本数据类型,分别是byte,int,short,long,float,double,boolean和char,它们存储的都是数据量比较小的数据,只需要1个或少量几个字节就可以了。因此,这些数据类型的变量的二进制值就直接保存着它们的...
  • Java中的变量类型根据不同的标准可以分为两类,如果以其引用的数据类型的不同来区分可分为“原始数据类型变量和引用数据类型变量”,如果以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”。...
  • 变量内存分配

    千次阅读 2012-07-03 10:41:05
    一个由C/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。  2、堆区(heap) — 一般由程序员分配...
  • C++各种变量内存分配

    千次阅读 2017-08-30 13:52:46
    程序在的内存中的分配(常量,局部变量,全局变量,程序代码)一. 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),...
  • 实例变量和类变量内存分配

    千次阅读 2013-11-03 12:54:53
    Java向程序员许下一个承诺:...java内存管理分为两方面:  1,内存的分配:指创建java对象时,jvm为该对象在堆内存中所分配的内存空间。 2,内存的回收:指当该java对象失去引用,变成垃圾时,jvm的垃圾回收机制自动清
  • IOS中两种变量声明方法的区别

    千次阅读 2015-01-20 15:26:18
    一直疑问,在objective_C中声明变量 2方式,今天有空和网友讨论了下,并且自己查了stackoverflew后算是稍微弄懂了一点。记录如下:  用了一段oc;会发现2定义变量的方式  1.在 @interface :NSObject...
  • 变量声明没有分配内存

    千次阅读 2015-04-29 21:17:28
    int i 这个没有分配内存呢? int *p 呢? 具体是在栈空间还是在堆空间里分配内存呢?   A1: int i; int *p; 这个都在栈区分配了内存空间 但是p指向的地址为野地址,不可直接拿来使用 即p指向的...
  • 变量、作用域和内存问题

    千次阅读 2016-03-13 13:20:36
    下述内存主要讲述了《JavaScript高级程序设计(第3版)》第4章关于“变量、作用域和内存问题”。JavaScript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已。 (1)基本类型的值在内存中...
  • 3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束释放。 4另外还有一个专门放常量的地方
  • js基础 - 变量内存、数据

    千次阅读 2021-08-08 10:53:33
    内存:数据存在内存中,内存有两种数据(1内部存储的基本数据,2地址值数据(表示该内存,可被多个对象指向)) 对象变量中存的是对象内存地址值,通过地址值找到该地址中存储的地址值数据 代码加载到内存中–>...
  • 我们要交换个数字,通常的做法就创建一个中间变量,然后进行循环赋值,比如说下面的代码: void Switch(int* p1, int* p2) { int tmp = *p1; *p1 = *p2; *p2 = tmp; }这种做法是最常见的一交换个...
  • 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于...
  • 概念首先得明白局部变量,静态局部变量,全局变量,静态全局变量这几个概念,以下面程序举例://main.cpp int a = 0; //全局变量 static int b=0;//静态全局变量 main() { int c; //局部变量 static int d;//静态...
  • 不引入第三变量来交换变量值,其中最常用的就应该是位运算了: int a=10=1010,int b=12=1100, a=a^b;//1010^1100=0110 b=a^b;//0110^1100=1010 a=a^b;//0110^1010=1100; 此算法能够实现是由异或运算的特点决定的,...
  • 内存问题--全局变量被修改

    千次阅读 2016-05-12 10:05:09
    一、遇到的问题1)情景说明: 我在一个类中定义了一个全局...该变量a期初一直输出10,在突然的某一时刻,该值变成了 0二、我所想到的问题的原因我看到这种现象后,脑子不加思索的就想到以下两种原因: 1)肯定
  • JAVA变量内存分配

    千次阅读 2015-04-23 17:12:32
    本质上讲,变量实际上是内存中的一块区域,使用变量名来访问这块区域。每个变量使用前必须要先声明,然后赋值才可以使用。根据变量的声明位置,可以分成①局部变量:声明在方法体内(包含方法的参数)或语句块内部的...
  • 内存:通电后产生可存储数据的空间,断电后数据消失,内存有两块数据,一块是数据,一块是地址 变量:由变量名和变量值组成,每个变量都对应一小块内存变量名用来查找内存变量值为该内存中保存的数据 相关问题...
  • 全局变量,静态全局变量,静态局部变量,类静态成员内存分配与初始化问题 全局变量,静态全局变量,静态局部变量,类静态成员内存分配都为全局数据区(静态区)(data区) 他们都在程序执行之前就进行了内存分配 初始化...
  • Js代码在运行前还有一个过程:预加载,预加载的目的是:事先构造运行环境例如全局环境,函数运行环境,还有构造作用域链(函数执行的第一步不是执行函数里的第一行代码而是在上下文变量里构造一个作用域链(作用是保证...
  • 学习了C++这么久,内存问题感觉一直...我们知道当一个函数进行调用时,函数的形参、以及函数的局部变量都会在栈中被分配内存,而栈又可分为两种,一种是栈底不变,栈顶不断的动态变化;另一种是栈顶不变,栈底在动态变
  • C语言中 对变量内存关系的探讨

    千次阅读 2013-07-26 20:59:28
    变量:用来标识(identify)一块内存区域,这块区域的值一般是可以更改的,这就是它“变”的由来,但是我们可以通过使用如const等一些修饰符号来限定这一内存区域的操作特性(characteristic),即变量的操作特性。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 944,701
精华内容 377,880
关键字:

内存变量分为哪两种