Змінна - це логічна конструкція, яка відповідає наміру алгоритму, тоді як місце пам'яті - це фізична конструкція, яка описує роботу комп'ютера. Взагалі, для виконання програми існує (створений компілятором) зіставлення між логічним поняттям змінної та зберіганням комп'ютера.
(Навіть у мові складання у нас є поняття (логічні) змінні, що переходять до алгоритму та наміру, та до (фізичної) пам'яті, хоча вони в більшій кількості пов'язані в складанні.)
Змінна - це концепція високого (ер) рівня. Змінна являє собою або невідому (як в математиці, або програмуванні) або держатель місця, яку можна замінити значенням (як у програмуванні: параметри).
Місце пам'яті - це концепція низького рівня (er) рівня. Місце пам'яті може використовуватися для зберігання значення, іноді для зберігання значення змінної. Однак регістр ЦП - це ще один спосіб збереження значення певної змінної. Регістри процесора також є місцями зберігання низького рівня (er), але вони не є пам'яттю, оскільки вони не мають адреси, а лише імена.
У певному сенсі змінна є механізмом абстрагування для вираження намірів програми, тоді як місце пам'яті - це фізична сутність обробного середовища, яка забезпечує зберігання та пошук.
Питання 003: Чи правда, що вказівник зберігається всередині пам'яті 0x23452? Чому?
Ми не можемо сказати, напевно. Тільки тому, що там є значення, яке буде працювати як адреса, не означає, що це адреса, натомість це може бути ціле число (десятковий) 144466. Ми не можемо робити припущення щодо інтерпретації значень лише на основі того, як вони відображаються чисельно.
Питання 004: Чи правда, що вказівник зберігається всередині пам'яті 0x23452? Чому?
Це справді дивне питання. Вони очікують деяких припущень, заснованих на полях, однак зазначимо, що адреси збільшуються на 1 для кожного поля. У будь-якому сучасному комп’ютері це означатиме, що кожне поле може містити байт - байт-адресацію, є нормою вже десятиліттями. Однак байт становить лише 8 біт і може становити від 0 до 255 (для непідписаних значень); але вони виявляють набагато більшу цінність, що зберігається в одній з цих адрес, так що дуже підозріло. (Це може спрацювати, якби це машина, адресована словом, але це не говорить про це, і сьогодні мало машин, хоча деякі навчальні машини такі.)
На основі чотирьох карт, які я вам показав, я б визначив вказівники дещо по-іншому:
Вказівник - це місце пам'яті, значенням якого є адреса пам'яті іншого місця пам'яті.
Хоча бувають ситуації, коли таке мислення правильне, ви тут змішуєте метафори. Поняття змінної переходить до алгоритму та його наміру - не потрібно вважати, що всі змінні мають місце пам'яті. Деякі змінні (особливо масиви) мають місця пам'яті, оскільки місця пам'яті підтримують адресацію (тоді як регістри процесора можуть бути названі лише неіндексованими).
Для виконання існує логічне відображення між змінними та операторами та місцями пам'яті процесора та послідовностями інструкцій процесора. Змінна, значення якої ніколи не змінюється (наприклад, константа), навіть не обов'язково вимагає розташування пам'яті, оскільки значення може бути відтворене за бажанням (наприклад, як це потрібно для кодових послідовностей, згенерованих компілятором).
a
,0x23453
.nil
і т.д. речі всередині них - це значення. Це може здатися вам очевидним, але мені не було б зручно давати вирішальні відповіді на ці питання, не бачачи того, як визначені ці поля. Дійсно неможливо дізнатися, чи єa
на другому зображенні символ, рядок (якщо вони є різними) чи ім'я змінної. Якщо це рядок, то цеnil
також рядок? Або "нульове" значення?