приведение от двойной к целочисленной переменной - PullRequest
1 голос
/ 21 октября 2011

Я написал эту программу в Dev C ++ IDE. Я ожидал, что это может потерпеть крах. но он показывает правильный вывод. некоторые могут объяснить, как распределяется память здесь. Почему это работает.

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

1 Ответ

0 голосов
/ 03 ноября 2011

В C локальные переменные и параметры хранятся в регистрах и в стеке. Это означает, что, пока у вас есть свободное место в стеке, они будут помещаться туда без явного выделения.

На самом деле все программы запускаются со стеком, выделенным по умолчанию, поэтому программе на C не нужно запрашивать больше памяти.

Как работает стек? ну ... в общем есть регистр для хранения указателя на кусок памяти. Всякий раз, когда вы входите в функцию, этот регистр перемещается так, что теперь он указывает на свободную часть стека, а когда вы покидаете эту функцию, восстанавливается старое значение регистра стека.

Внутренняя работа немного сложнее, но это общая идея.

...