2

可能重复:
堆栈和堆是什么以及在哪里?

一个不同的基本问题,请原谅我的无知。请让我知道是否在 C++ 中对普通(自动非静态和非全局)变量进行简单的变量声明,例如 .... float 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;
}
4

2 回答 2

2

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

这适用于 C++ 而不是 C 的原因与堆栈与堆分配无关。“使用命名空间 std”和您 #included 的 iostream.h 文件仅存在于 C++ 标准模板库中!请参阅http://www.cplusplus.com/reference/以查看 C 与 C++ 中可用的内容。

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

于 2013-01-26T04:39:47.733 回答
0

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

有关更多详细信息,请参阅此响应:堆栈和堆是什么以及在哪里?

于 2013-01-26T04:40:54.210 回答