首页 > 试题广场 >

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

[单选题]
int a=0;
class someClass{
   int b;
   static int c;
};
int main(){
   int d=0;
   someClass *p=new someClass();
   return 0;
}
关于以上代码中的变量在内存中的存储位置描述正确的是()
  • 堆、栈、全局区均有变量
  • 不存在堆区的变量
  • 不存在栈区的变量
  • 不存在全局变量区的变量
B
1、栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
2、堆区(heap) — 一般由程序员分配释放, new, malloc之类的,若程序员不释放,程序结束时可能由OS回收 。
3、全局区(静态区)(static)— 存放全局变量、静态数据、常量。程序结束后由系统释放。
4、文字常量区 — 常量字符串就是放在这里的。程序结束后由系统释放。
5、程序代码区 — 存放函数体(类成员函数和全局函数)的二进制代码。
////////////////////////////////////////
a,全局变量,全局区;
b,成员变量,堆区;(我是这样理解的,因为对象要申请,会放在堆区,所以类的成员也就是放在堆区)
c,静态变量,静态区;
d,方法变量,栈区;
p,方法变量,栈区,指向堆区的对象。
编辑于 2017-06-19 16:22:41 回复(14)
变量a 全局变量 存放在全局变量区
变量b 类的成员变量 由类的定义决定  在main函数中类A动态分配 因此b在堆区
变量c 静态成员 静态存储区
变量d 局部变量 栈区
编辑于 2016-11-29 21:06:04 回复(3)
 这里要注意理解b,因为对象有动态分配空间时,里面已经包含了成员变量的空间,所以成员变量也存储在堆中。
发表于 2016-05-21 15:12:51 回复(3)
以上都不对明显是不正确答案啊!!!
只要有一个答案对就不是以上都不对!
发表于 2017-06-15 10:54:30 回复(0)
<pre class="prettyprint lang-cpp"> <div class="line number1 index0 alt2" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;"> inta=0; </div> <div class="line number2 index1 alt1" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;"> classsomeClass{ </div> <div class="line number3 index2 alt2" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;">    intb; </div> <div class="line number4 index3 alt1" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;">    staticintc; </div> <div class="line number5 index4 alt2" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;"> }; </div> <div class="line number6 index5 alt1" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;"> intmain(){ </div> <div class="line number7 index6 alt2" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;">    intd=0; </div> <div class="line number8 index7 alt1" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;">    someClass *p=newsomeClass(); </div> <div class="line number9 index8 alt2" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;">    return0; </div> <div class="line number10 index9 alt1" style="color: rgb(51,51,51);margin: 0.0px;padding: 0.0px 1.0em;vertical-align: baseline;"> } </div> </pre> <div> 解析参考了其他牛友回答(记录下来权当学习笔记): </div> <div> a:<strong>全局变量</strong>;位于全局区,选项<strong>D正确</strong>。 </div> <div> b:<strong>类的非static成员变量</strong>;<strong>类</strong>动态分配内存是在<strong>堆区</strong>,这片内存也包含了该<strong>类</strong>中<strong>非static成员变量</strong>的地址空间,因此b<strong>也在堆区</strong>;选项<strong>A正确</strong>。 </div> <div> c:<strong>类的static成员变量</strong>;<strong>static变量位于静态区</strong>,不是堆区,选项<strong>B错误</strong>。 </div> <div> d:<strong>局部变量</strong>;位于<strong>栈区</strong>,选项<strong>C正确</strong>。 </div> <div> <br> </div> <div> 关于内存分区: </div> <div> <strong>1、栈区</strong>:存放为运行函数而分配的<strong>局部变量、函数参数、返回数据、返回地址</strong>等。<strong>由编译器自动分配释放</strong>。 </div> <div> 2、<strong>堆区</strong>:即利用<strong>new、malloc手动分配的</strong>内存空间,需要<strong>程序员手动分配、释放</strong>。 </div> <div> 3、<strong>全局/静态区</strong>:主要存放全局变量、静态数据。<strong>程序结束后由系统释放</strong>。(全局变量和静态数据的区别可自查,虽同区但作用域不同) </div> <div> 4、<strong>常量区</strong>:存放常量。字符串常量即存放这里,<strong>程序结束后由系统释放</strong>。 </div> <div> 5、<strong>代码区</strong>:存放函数体的二进制代码。 </div>
编辑于 2016-08-12 15:12:46 回复(0)
如上所说,
A. b存在堆区。new分配的是堆上的内存空间,该例中分配的是类someClass类型的空间,该类中的变量与函数都被存储于堆上,作为static类型的变量C例外。
B.c是静态变量,编译时编译器为静态变量分配内存,静态变量处于静态存储区。
C.d是局部非静态变量——栈区
D. a是全局变量——全局区
发表于 2016-05-08 21:48:15 回复(0)
new完之后,是不是没有在堆中申请内存啊?
发表于 2018-04-14 11:18:20 回复(0)
1、栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。 2、堆区(heap) — 一般由程序员分配释放, new, malloc之类的,若程序员不释放,程序结束时可能由OS回收 。 3、全局区(静态区)(static)— 存放全局变量、静态数据、常量。程序结束后由系统释放。 4、文字常量区 — 常量字符串就是放在这里的。程序结束后由系统释放。 5、程序代码区 — 存放函数体(类成员函数和全局函数)的二进制代码。
发表于 2018-01-02 17:42:30 回复(0)
类的成员变量在堆区,类的成员函数在代码区
发表于 2017-12-12 18:30:41 回复(0)
下面的解析看不懂,求指点
发表于 2017-05-28 21:20:15 回复(0)
麻烦出题人把题目先描述清楚再提问,什么鬼扯的答案。
发表于 2017-05-26 11:43:24 回复(1)
答案是什么鬼…都没说哪个变量,就说堆区……
发表于 2017-05-16 09:18:11 回复(0)
a是全局变量则a在全局区
b,c都是类的成员变量,根据类的存放存放,所以都在堆区
d栈区
*p堆区
p栈区
发表于 2017-03-20 19:40:47 回复(0)
因为b 包含在类中,类的创建是new的,是在堆中的, 所以b 也是在堆中
发表于 2017-03-15 17:34:52 回复(0)
推荐解析
发表于 2016-10-08 17:36:51 回复(0)
题目要看清哦
发表于 2016-06-28 10:59:51 回复(0)
栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
2、堆区(heap) — 一般由程序员分配释放, new, malloc之类的,若程序员不释放,程序结束时可能由OS回收 。
3、全局区(静态区)(static)— 存放全局变量、静态数据、常量。程序结束后由系统释放。
4、文字常量区 — 常量字符串就是放在这里的。程序结束后由系统释放。
5、程序代码区 — 存放函数体(类成员函数和全局函数)的二进制代码。
发表于 2016-05-31 17:11:02 回复(0)
ac全局静态区,d是栈,b属于对象,是堆
编辑于 2016-03-28 18:28:52 回复(0)
1、栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
2、堆区(heap) — 一般由程序员分配释放, new, malloc之类的,若程序员不释放,程序结束时可能由OS回收 。
3、全局区(静态区)(static)— 存放全局变量、静态数据、常量。程序结束后由系统释放。
4、文字常量区 — 常量字符串就是放在这里的。程序结束后由系统释放。
5、程序代码区 — 存放函数体(类成员函数和全局函数)的二进制代码。
发表于 2016-03-20 10:33:45 回复(0)
表示不是太懂
发表于 2016-03-07 20:36:37 回复(0)