Развёрнутое пояснение
1️⃣Глобальные 𝚐 = 𝟶 и 𝚗 = 𝟶.
2️⃣Вызывается 𝚘𝚞𝚝𝚎𝚛(): создаются локальные 𝚐 = 𝟷 и 𝚗 = 𝟷, которые перекрывают глобальные в этой области.
3️⃣В 𝚒𝚗𝚗𝚎𝚛 инструкция 𝚐𝚕𝚘𝚋𝚊𝚕 𝚐 привязывает 𝚐 к глобальной области (где 𝚐 = 𝟶), а 𝚗𝚘𝚗𝚕𝚘𝚌𝚊𝚕 𝚗 — к локальной 𝚗 из 𝚘𝚞𝚝𝚎𝚛.
4️⃣Присваивание 𝚐, 𝚗 = 𝟸, 𝟸: глобальная 𝚐 становится 𝟸, локальная 𝚗 из 𝚘𝚞𝚝𝚎𝚛 становится 𝟸. Локальная 𝚐 в 𝚘𝚞𝚝𝚎𝚛 остаётся 𝟷.
5️⃣𝚙𝚛𝚒𝚗𝚝(𝚐, 𝚗) внутри 𝚘𝚞𝚝𝚎𝚛 выводит локальную 𝚐 = 𝟷 и 𝚗 = 𝟸 → 1 2.
Почему это важно
Симметричная структура кода (обе переменные инициализируются одинаково на всех уровнях) создаёт иллюзию, что 𝚐𝚕𝚘𝚋𝚊𝚕 и 𝚗𝚘𝚗𝚕𝚘𝚌𝚊𝚕 работают одинаково — но 𝚐𝚕𝚘𝚋𝚊𝚕 игнорирует промежуточную область 𝚘𝚞𝚝𝚎𝚛, а 𝚗𝚘𝚗𝚕𝚘𝚌𝚊𝚕 работает именно с ней.
Post #4550
739
- 👍 4