Что бы эта программа выводила, если на C ++ была динамическая область? [Дубликат]

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

Например:

var result = 1.0 + 2.0;     // result === 3.0 returns true

... вместо:

var result = 0.1 + 0.2;     // result === 0.3 returns false

Выражение 0.1 + 0.2 === 0.3 возвращает false в JavaScript, но, к счастью, целочисленная арифметика в плавающей запятой является точной, поэтому ошибки с десятичным представлением можно избежать путем масштабирования.

В качестве практического примера, чтобы избежать проблем с плавающей запятой, где точность имеет первостепенное значение, рекомендуется обрабатывать деньги как целое число, представляющее число центов: 2550 центов вместо 25.50 долларов.


1 Дуглас Крокфорд: JavaScript: Хорошие детали: Приложение A - Ужасные части (стр. 105) .

6
задан user3386109 12 February 2016 в 01:20
поделиться

2 ответа

Как известно, C не имеет динамического охвата, но, предположив, что это действительно так, программа будет печатать 3 4.

В основном, a и b являются глобальными. a будет установлено равным 2, так как мы увидим, что это то, что p вернется.

В p, вызванном из main, b по-прежнему является глобальным, но a является локальным в p. Локальный a установлен в 0, но скоро исчезнет. Глобальное значение b установлено в 1. Локальный p установлен в 2, и будет возвращено значение 2. Теперь глобальный b равен 1.

В q, вызванном из main, a является глобальным, но b является локальным в q. Здесь глобальное значение a задано равным 3, а локальное b - 4.

В принте, вызванном из q, a является глобальным (имеющим значение 3), а b - локальный в q (который имеет значение 4).

На этом последнем этапе внутри функции print мы видим отличие от статического охвата. При статическом охвате a и b будут глобальными. С динамическим охватом мы должны смотреть на цепочку вызывающих функций, а в q находим переменную b, которая будет использоваться внутри печати. ​​

6
ответ дан Thomas Padron-McCarthy 26 August 2018 в 08:47
поделиться

C не является языком с динамическим охватом. Если вы хотите поэкспериментировать, чтобы понять разницу, вам лучше жить на языке Perl, который позволяет выбирать между ними.

3
ответ дан kelf 26 August 2018 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: