2011-10-21 16 views
1

私はDev C++ IDEでこのプログラムを書いています。私はクラッシュするかもしれないと思っていた。正しい出力を表示しています。メモリがここに割り当てられる方法を説明してください。なぜこれが機能していますか?変数doubleから整数へのキャスト

int main() 
{ 
    int i=10; 
    double d=3333333.555 ; 
    i=d+d; 
    printf(" Value of I after assignment %d",i); 
    getch(); 
} 
+1

メモリがどのように割り当てられますか?これは簡単な追加です。 –

+2

私が間違っていない場合、操作の順序は3333333.555 + 3333333.555(加算演算子)であり、結果は6666667.11(まだ二重)です。結果はint(代入演算子)にキャストされ、値が6666667に切り捨てられます。これは期待している値ですか? – avanek

+0

たとえば:int i;ダブルd = 3333333.555; i = int(d); –

答えて

0

Cでは、ローカル変数とパラメータはレジスタとスタックに保持されています。つまり、スタックに空き領域がある限り、明示的な割り当てなしでそこに配置されます。

実際、すべてのプログラムはデフォルトでスタックが割り当てられているため、Cプログラムがメモリをさらに要求する必要はありません。

スタックはどのように機能しますか?まあ...一般的にメモリのチャンクへのポインタを保持するためのレジスタがあります。関数に入力するたびに、そのレジスタはスタックの空き部分を指すように移動し、その関数を終了するとスタックレジスタの古い値が復元されます。

内部の動作はもう少し面倒ですが、それは一般的な考えです。

関連する問題