C ++中的普通(自动)变量使用堆栈还是堆?

时间:2013-01-26 04:33:04

标签: c++

  

可能重复:
  What and where are the stack and heap?

一个不同的基本问题,请原谅我的无知。请让我知道C ++中的简单变量声明是否适用于普通(自动非静态和非全局)变量.... 浮动x;在函数范围内,比如说main()使用堆栈或堆(免费存储)内存吗? 我问这个是因为下面给出的代码在C ++中工作,但不在C中。 提前谢谢。

#include <iostream>
using namespace std;

int main()
{ 
    int a,b;
    cin >> a >> b; 
    if(a < b)
    { 
        int c = 1925;
        float d = 0.7;
    }
    else
    {
        double e = 889.7; 
        short f = 35;
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

这些变量将在堆栈上创建,并在离开其包含范围时被销毁。例如,当if语句终止时,c和d将不再可用,因为当它们击中第一个右括号“}”时它们将超出范围。

这在C ++中起作用的原因,而不是C,与堆栈与堆分配无关。 “using namespace std”和你已经#included的iostream.h文件只存在于C ++标准模板库中!请参阅http://www.cplusplus.com/reference/以查看C与C ++中可用的内容。

当您使用new运算符时,堆分配有效,该运算符返回指向堆上新分配的对象的指针,并且在您在指针上显式调用delete之前不会销毁它。

答案 1 :(得分:0)

以您描述的方式声明的变量存储在堆栈中。

有关详细信息,请参阅此回复:What and where are the stack and heap?

相关问题