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 では機能しない理由は、スタックとヒープの割り当てとは関係ありません。「using namespace std」と #include した iostream.h ファイルは、C++ 標準テンプレート ライブラリにのみ存在します。C と C++ で何が利用できるかを確認するには、 http://www.cplusplus.com/reference/を参照してください。

ヒープ割り当ては、ヒープ上で新しく割り当てられたオブジェクトへのポインターを返す new 演算子を使用すると機能し、ポインターに対して明示的に delete を呼び出すまで破棄されません。

于 2013-01-26T04:39:47.733 に答える
0

説明した方法で宣言された変数は、スタックに格納されます。

詳細については、この応答を参照してください:スタックとヒープとは何ですか?

于 2013-01-26T04:40:54.210 に答える