Каково определение переменной

На тесте мне задали вопрос

Give a definition of a variable

Я ответил:

A named location in memory.

Учитель отметил мой ответ как неправильный и сказал, что мне нужно добавить, что переменные могут меняться.

Я не думаю, что учитель здесь прав, поскольку «константы» - это пример переменной, которую нельзя изменить, и вопрос задается только для общего определения термина.

Какое настоящее определение?

Настоящее определение в вашем конкретном случае - «какое бы определение ни использовал ваш учитель», потому что, вероятно, он примет только это;)

ThiefMaster 25.10.2018 16:40

«Именованное место в памяти». больше похоже на объект.

chux - Reinstate Monica 25.10.2018 17:00

@chux: объекту не обязательно иметь имя.

Eric Postpischil 25.10.2018 17:07

Слово «переменная» или «изменяемый» указывает на то, что она может варьироваться или изменяться. В этом смысле учитель прав. «Именованной ячейки памяти» недостаточно. Метка в исполняемом коде также отмечает «именованную ячейку памяти», а именно, куда может перейти выполнение кода.

Paul Ogilvie 25.10.2018 17:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
4
252
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Этот вопрос помечен тегом C, но стандарт C не определяет «переменную». В том смысле, о котором спрашивают, стандарт 2018 использует это слово в основном в ненормативных примечаниях, примерах и сносках. Те немногие места, где он используется в нормативном тексте, относятся к дополнительным языковым функциям, добавленным позже (например, потокам и атомарным объектам), и я не рассматриваю их использование в качестве надежной информации о значении.

В стандарте то, что обычно считается переменными, действительно описывается через «объекты» (области хранения) и «идентификаторы» (имена). В этом плане ваш ответ правильный.

Однако нам неизвестен контекст вашего класса. Возможно, он включал обсуждение термина «переменная», и это обсуждение могло определить его как то, что требуется вашему учителю для теста.

Исторически переменные представляли собой объекты, значения которых можно было изменять, и поэтому они были названы. Эволюция языков программирования, чтобы иметь постоянные объекты, произошла позже, что привело к некоторому конфликту между историческим названием и текущим использованием. Я полагаю, что это одна из причин, почему стандарт C перешел от «переменной» к «объекту» и «идентификатору». Настаивать на использовании этого термина только в его историческом значении является чрезмерно жестким, если только это не было явным определением, представленным в курсе.

ISO / IEC9899: 2017 (N2176) §6.7 / 5:

A declaration specifies the interpretation and attributes of a set of identifiers. A definition of an identifier is a declaration for that identifier that:
— for an object, causes storage to be reserved for that object;

Таким образом, для

Give a definition of a variable

отвечая

int foo;

будет достаточно.

Это было бы правильной интерпретацией вопроса теста в другом контексте, но ответ учителя, как указано в вопросе, дает понять, что это не предполагаемая интерпретация. Учитель хотел объяснить значение слова, а не пример. Между прочим, «достаточно» - это не стандартный английский, по крайней мере, в Соединенных Штатах. «Достаточно» - обычное дело.

Eric Postpischil 26.10.2018 04:15

Из Википедия о Переменная и его определение:

In computer programming, a variable or scalar is a storage location (identified by a memory address) paired with an associated symbolic name (an identifier), which contains some known or unknown quantity of information referred to as a value. The variable name is the usual way to reference the stored value, in addition to referring to the variable itself, depending on the context.

This separation of name and content allows the name to be used independently of the exact information it represents. The identifier in computer source code can be bound to a value during run time, and the value of the variable may thus change during the course of program execution.

Например, здесь

int input = 10; /* definition of variable input */ 

В приведенном выше инициализация (объявление с присвоением) переменной input, есть некоторая память, зарезервированная для input в самом время компиляции где-то в разделе куча первичной памяти баран. И тут

const int input = 10; /* definition of variable input */ 

input - это постоянная переменная, то есть не могу изменить это напрямую, но все же это Переменная, то есть он может что-то содержать, поэтому он занимает место в оперативной памяти первичной памяти.

Определение не обязательно приводит к тому, что значение находится где-то в памяти.

user10543939 25.10.2018 17:29

@ J.Doe: Вопрос помечен тегом C. Согласно C 2018 6.7 5 определение идентификатора - это объявление, которое «для объекта приводит к резервированию памяти для этого объекта…»

Eric Postpischil 26.10.2018 04:11

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

Самым близким к «переменной» в C является «объект», и он определен в 3.5:

1 object
region of data storage in the execution environment, the contents of which can represent values

2 NOTE When referenced, an object may be interpreted as having a particular type; see 6.3.2.1.

В C некоторые объекты имеют квалификацию const, что может лишить их права быть «переменными» в глазах некоторых / многих людей, использующих язык. С другой стороны, объекты с квалификацией const не ведут себя как константы, которые можно использовать в постоянные выражения; скорее, они похожи на все другие объекты, за исключением того, что любая попытка изменить их значения приводит к неопределенному поведению.

Обратите внимание, что слово «переменная» действительно встречается в стандарте несколько раз, в основном в контексте «переменных аргументов» (stdarg.h) или «массивов переменной длины» / «изменяемых типов». Однако он также неофициально используется в ряде примеров и примечаний, а также в некотором нормативном тексте, предположительно для ссылки на объекты, но без определения.

Другие вопросы по теме