精华内容
下载资源
问答
  • //const局部变量 #include <iostream> #include <string> using namespace std; int main() { const int *np; { const intvar0= 10; //从运行结果可知var未存储在栈上 np= &var0; } int var1 = ...

    //const局部变量

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        const int *p = NULL;
        
        {
            const int var1 = 10;
            p = &var1;
            cout << "var1 addr: " << &var1 << endl;
        }
        
        int var2 = 20;
        cout << "var2 addr: " << &var2 << endl;
        
        cout << *p << endl;
        
        return 0;    
    }

    运行结果

     

    谁能给解释一下为什么是这样的结果???


    #include <stdio.h>
    #include <string.h>
    
    
    int main(int argc, char *argv[])
    {
        int *p = NULL;
        
        {
            const int var1 = 10;
            printf("var1 addr: %p\n",&var1);
            p = (int*)&var1;
            printf("p: %p\n",p);
        }
        
        int var2 = 20;
        printf("var2 addr: %p\n",&var2);
        
        printf("*p: %d\n",*p);
        
        *p = 30;
        printf("*p: %d\n",*p);
        
        return 0;    
    }

    结果

    展开全文
  • 关于成员变量和局部变量存储位置

    千次阅读 2020-04-11 10:28:28
    成员变量在堆内存里,局部变量在栈内存里。(基础类型) 我有疑惑: 既然成员变量存在于对象中,对象存在于堆中,所以成员变量存在于堆中。那么按照这样的推理,局部变量存在于方法中,而方法存在于对象中,对象存在...

    成员变量在堆内存里,局部变量在栈内存里。(基础类型)

    我有疑惑:

    既然成员变量存在于对象中,对象存在于堆中,所以成员变量存在于堆中。那么按照这样的推理,局部变量存在于方法中,而方法存在于对象中,对象存在于堆中,那是不是可以说局部变量存在于堆中?

    解决思想

    当对象new出来,实体存在于堆,对象的成员变量已经在堆上分配空间,但对象里面的方法是没有出现的,只出现方法的声明,方法里面的局部变量并没有创建。等到对象调用此方法时,为了加快运行的速度,方法中的局部变量才会在栈中创建,所以,方法中的局部变量是在栈内的。

    当然需要注意的是类变量(静态变量)存在于方法区!!引用类型的局部变量声明在栈,存储在堆

    内存:栈 1.存放局部变量 2.不可以被多个线程共享 3.空间连续,速度快
    堆 1.存放对象 2.可以被多个线程共享 3.空间不连续,速度慢,但是灵活
    方法区 1.存放类的信息:代码、静态变量、字符串常量等等 2.可以被多个线程共享 3.空间不连续,速度慢,但是灵活

    总的来说:我们先来记住两条黄金法则:
    1.引用类型总是被分配到“堆”上。不论是成员变量还是局部
    2.基础类型总是分配到它声明的地方:成员变量在堆内存里,局部变量在栈内存里。

    展开全文
  • 成员变量在堆内存里,局部变量在栈内存里。(基础类型) 疑问点: 既然成员变量存在于对象中,对象存在于堆中,所以成员变量存在于堆中。那么按照这样的推理,局部变量存在于方法中,而方法存在于对象中,对象存在于...

    成员变量在堆内存里,局部变量在栈内存里。(基础类型)

    疑问点:

    既然成员变量存在于对象中,对象存在于堆中,所以成员变量存在于堆中。那么按照这样的推理,局部变量存在于方法中,而方法存在于对象中,对象存在于堆中,那是不是可以说局部变量存在于堆中?

    解决思想

    当对象new出来,实体存在于堆,对象的成员变量已经在堆上分配空间,但对象里面的方法是没有出现的,只出现方法的声明,方法里面的局部变量并没有创建。等到对象调用此方法时,为了加快运行的速度,方法中的局部变量才会在栈中创建,所以,方法中的局部变量是在栈内的。

    当然需要注意的是类变量(静态变量)存在于方法区!!引用类型的局部变量声明在栈,存储在堆

    内存:栈 1.存放局部变量 2.不可以被多个线程共享 3.空间连续,速度快
    堆 1.存放对象 2.可以被多个线程共享 3.空间不连续,速度慢,但是灵活
    方法区 1.存放类的信息:代码、静态变量、字符串常量等等 2.可以被多个线程共享 3.空间不连续,速度慢,但是灵活

    总的来说:我们先来记住两条黄金法则

    #引用类型总是被分配到“堆”上。不论是成员变量还是局部
    #基础类型总是分配到它声明的地方:成员变量在堆内存里,局部变量在栈内存里。

    展开全文
  • 按照一般教科书上的说法,C语言中的局部变量应该是分配在"栈"中的。而实际情况,有些出入录,肯能更容易理解。  这一段代码,唯一的用途,就是分配变量。int func1(void) { volatile int father; volatile ...
  • 全局变量和局部变量存储位置

    千次阅读 2015-09-26 17:25:52
    全局变量和局部变量在内存中的区别是什么? 正确答案: B C 你的答案: C (错误)...内存中,全局变量和静态变量存在于全局区/静态区,局部变量存在于栈区,new的对象存在于堆区,malloc的对象存在于自由存储区,常量存

    全局变量和局部变量在内存中的区别是什么?
    正确答案: B C 你的答案: C (错误)

    二者没有区别
    生存周期不同
    作用范围不同
    占用的内存的大小一样

    程序的局部变量存在于( 堆栈 )中,全局变量存在于( 静态区 )中,动态申请数据存在于( 堆 )中。
    内存中,全局变量和静态变量存在于全局区/静态区,局部变量存在于栈区,new的对象存在于堆区,malloc的对象存在于自由存储区,常量存在于常量区

    展开全文
  • 我们知道在C++中,全局变量和局部变量存储区域不同,全局变量存放在静态数据区,局部变量存放在栈区。但还有一个小点就是存放在静态数据区的变量是由低地址向高地址存放的,但存放在栈区的变量却是由高地址向低...
  • aa这个局部变量存储在栈内存中; 2.Java中常量的存储位置 常量存放在常量池中,而常量池在堆内存中 3.Java中局部变量的存储位置 局部变量存放在栈内存中 4.Java中全局变量和Static常量的存储位置 存放在全局数据区内...
  • 局部变量,参数变量存放在栈中,当离开作用范围后,分配的内存在作用范围外会被系统自动回收。 切记!不要使用局部变量的指针和引用! 在函数结束后,局部变量被释放后,指针和引用可能在短时间内可以使用,也可能...
  • C++变量存储位置

    千次阅读 2019-06-13 10:56:17
    转自:1.... ... C语言在内存中一共分为如下几个区域,他们分别是: 1 内存栈区: 存放局部变量名; 2 内存堆区: 存放new或者malloc出来的对象;...3 常数区:存放局部变量或...
  • 局部变量保存在动态数据区的栈中,只有在所在函数被调用时才动态地为变量分配存储单元。  1).主函数main中定义的变量也只在主函数中有效.  2).不同函数中可以使用名字相同的变量,它们代表不同的对象,互不干扰.
  • c 静态局部变量 .data 函数内部 程序运行周期 静态区 .data:全局初始化的变量 .bss:全局未初始化变量 .rdata:全局只读 全局变量同一个文件中先定义先初始化,不同不确定
  • 由于变量的作用域不同,我们将变量分为全局变量和局部变量局部变量一般是在一个函数内有效,只能在本函数内引用,其他函数不可用。全局变量一般是在函数外定义的变量,我们叫做全局变量。 即在函数内定义的是局部...
  • JAVA中的成员变量存储在堆内存中,而局部变量存在于栈内存中JAVA中的成员变量存储在堆内存中,而局部变量存在于栈内存中
  • C语言变量存储位置

    2018-07-28 13:53:19
    全局变量存放在静态存储区,位置是固定的。 局部变量在栈空间,栈地址是不固定的。 栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆:...
  • 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。 动态存储方式:是在程序运行...全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固
  • 从变量值的作用区域上区分,可将变量划分为全局变量和局部变量。全局变量从定义变量的位置至源文件的结束均有效。局部变量作用于在本函数范围内。如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用...
  • 一、实例变量 也叫成员变量、全局变量。 定义在类中、方法外,有默认初始值。 通过对象的引用来访问实例变量。 随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。...三、局部变量 定义在方法
  • 根据定义变量位置的不同,可以将变量分为成员变量和局部变量。 成员变量是 定义在一个类的变量:类中方法外 局部变量是定义在一个方法内的变量:方法中 成员变量分为: 静态属性:随类的存在而存在,是在类加载的...
  • C语言中局部变量和全局变量 变量的存储类别(static,extern,auto,register)   局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参...
  • JVM 变量存储位置

    千次阅读 2018-03-18 22:20:12
    1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:方法执行时创建方法栈帧,存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量...
  • Java中的变量根据不同的标准可以分为两类,以其引用的数据类型的不同来划分可分为“原始数据类型变量和引用数据类型变量”,以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”。 根据“...
  • C++基础知识——变量存储位置

    千次阅读 2016-05-06 10:31:09
    存放:函数的参数值,局部变量的值。 存储连续,其操作方式类似于数据结构中的栈。 栈区处于相对较高的地址以地址的增长方向为上的话,栈地址是向下增长的,所以空间有限,windows下大多1-2M。 2.堆区(heap):  ...
  • 来源: java中数据的5种存储位置(堆与栈) ...Java面向对象——成员变量和局部变量(成员变量和局部变量的初始化和内存运行机制&变量的使用规则) http://www.cnblogs.com/newveg/p/6591435.htm
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在...
  • linux中变量存储位置

    千次阅读 2016-12-01 17:00:42
    Linux应用程序地址布局 全局初始化变量:数据段 ...局部初始化的变量:栈 局部未初始化变量:栈 局部的、静态的、初始化变量:数据段 局部的、静态的、未初始化变量:数据段 局部常量:栈   通过mall
  • 今天开始看《程序员的自我修养:链接、装载与库》,对ELF文件格式内容进行一下总结,主要分析全局变量,静态变量以及局部变量存放位置。ELF文件有很多种:可重定位文件(如静态库),可执行文件,共享文件(动态库)...
  • 全局变量默认初始化为0,局部变量默认为随机数。  因为在内存中的存储位置不同。局部变量在动态储存区,全局变量在静态存储区。... static改变局部变量存储位置,由动态存储区->静态存储区。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,660
精华内容 68,264
关键字:

局部变量存储位置