首页 > 试题广场 >

关于以上代码中的变量在内存中的存储位置描述不正确的是()

[单选题]
int a=0;
class someClass{
   int b;
   static int c;
};
int main(){
   int d=0;
   someClass *p=new someClass();
   return 0;
}
关于以上代码中的变量在内存中的存储位置描述正确的是()
  • 堆、栈、全局区均有变量
  • 不存在堆区的变量
  • 不存在栈区的变量
  • 不存在全局变量区的变量

C/C++程序占用的内存分为以下几部分:

  1. 程序代码区
  2. 常量区存放常量。程序结束时由OS回收。
  3. 全局区(静态区)存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束时由OS回收。
  4. 堆区存放的变量(用new,malloc,calloc,realloc等分配内存函数得到的变量)由程序员分配释放。
  5. 栈区存放的变量(局部变量、函数参数等)由编译器自动分配释放。
发表于 2020-08-18 09:52:01 回复(0)

在C++中,内存一般分为4个区域:

  • 全局数据区:放全局变量、静态数据和常量
  • 代码区:所有类成员函数和非成员函数代码
  • 栈区:局部变量、函数参数、返回数据、返回地址
  • 堆区:new、malloc、calloc、realloc等分配内存函数得到的变量
    int a=0;
    class someClass{
     int b;
     static int c;
    };
    int main(){
     int d=0;
     someClass *p=new someClass();
     return 0;
    }

int a = 0;属于全局变量,在全局数据区

int b;至于类的普通成员变量b,该类的实例是通过new运算符生成的,产生了一个类指针p,那么b就存储在堆区。如果是someClass p;
那么b就存储在栈区,和类的实例的产生方式有关。

static int c;静态数据位于全局数据区

int d;局部变量,位于栈区

发表于 2020-09-22 20:08:36 回复(0)

让我们分析代码中各变量的存储位置:

  1. int a=0;- 这是一个全局变量,它存储在全局变量区。
  2. int b;- 这是类someClass的一个成员变量。它存储在实例化类对象时的位置。由于someClass的一个对象是通过new关键字在堆上创建的,因此b位于堆上。
  3. static int c;- 这是类someClass的一个静态成员变量,它存储在全局/静态存储区,而不是每个对象实例的内存中。
  4. int d=0;- 这是main()函数中的一个局部变量,它存储在栈上。
  5. someClass *p=new someClass();- 这里的p是一个指针变量,它存储在栈上。它指向的someClass对象实例存储在堆上。

综上所述:

  • 堆上有变量(someClass的实例)。
  • 栈上有变量(d 和 p)。
  • 全局/静态存储区有变量(a 和 c)。

所以,正确的描述是A:堆、栈、全局区均有变量。

编辑于 2023-09-08 11:48:00 回复(0)
请问someClass中的b是存放在哪里的呢,在堆中还是栈中?
发表于 2020-09-04 10:42:57 回复(1)

程序代码区
常量区存放常量。程序结束时由OS回收。
全局区(静态区)存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束时由OS回收
堆区存放的变量(用new,malloc,calloc,realloc等分配内存函数得到的变量)由程序员分配释放。
栈区存放的变量(局部变量、函数参数等)由编译器自动分配释放。

发表于 2021-06-11 09:31:36 回复(0)
  1. C/C++程序占用的内存分为以下几部分:
  2. 程序代码区
  3. 常量区存放常量。程序结束时由OS回收。
  4. 全局区(静态区)存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束时由OS回收。
  5. 堆区存放的变量(用new,malloc,calloc,realloc等分配内存函数得到的变量)由程序员分配释放。
  6. 栈区存放的变量(局部变量、函数参数等)由编译器自动分配释放

int a = 0;属于全局变量,在全局数据区

int b;至于类的普通成员变量b,该类的实例是通过new运算符生成的,产生了一个类指针p,那么b就存储在堆区。如果是someClass p;
那么b就存储在栈区,和类的实例的产生方式有关。

static int c;静态数据位于全局数据区

int d;局部变量,位于栈区


发表于 2022-09-02 16:12:19 回复(0)
内存四区 常量区存放常量,程序结束后由os回收 全局区(静态区),存放全局变量和静态变量在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域。程序结束后由os回收。 堆区存放的变量(new,malloc,calloc,realloc等分配内存函数得到的变量)由程序员分配释放 栈区存放的变量(局部变量,函数参数)由编译器自动释放
发表于 2023-07-25 22:30:37 回复(0)
简单理解,static全局,*p栈,new堆
发表于 2021-04-12 15:22:32 回复(0)