Сегодня столкнулся с довольно интересной ситуацией, , из которой вырос этот философский пост.
Для начала мне задали вопрос, по поводу одного тестового вопроса, который формировался таким образом - "В каких из заданных типов можно хранить число?". Вопрос этот был в рамках языка C++ и это довольно таки простой вопрос с простой формулировкой. Вариантами ответа были int, char, char[], float и еще пара других типов. Так вот, парень задавший мне вопрос выбрал, среди прочих, вариант char[] и аргументировал это тем, что в принципе в массиве можно хранить число.
Дело в том, что тест больше касался синтаксиса языка, и под "хранить" подразумевалась возможность написать нечто вида "X a = 22;", где X - имя типа (ну в общем случае, конечно). Очевидно, в рамках такого понятия - char[] полностью не подходит.
Однако, это приводит к самому вопросу о том, насколько размыто понятие "хранить" в голове программистов.
К примеру, я с позиций практика, который не так давно занимался оптимизацией недавно скажу что можно сделать memcpy числа в массив, взяв от числа адрес и сохранить там число. Неважно зачем я делаю это глупое действие - главное можно.
С более простой позиции обратится к первому элементу. и если число влезает - можно и записать число и хранить его. А можно так и сохранить в указатель. И при должном извращении то и в указатель на функцию. И вообще как угодно.
Обобщить обе эти позиции довольно легко. Понятие "хранить" в них означает, что для данных двух типов есть прямое сюръективное отображение и обратное отображение (биекция не обязательна).
А вот с синтаксической позицией - все просто. Подразумевается, что данный тип должен описывать число. Указатели с точки зрения семантики не описывают числа, массивы - тоже.
А теперь самое интересное - однозначна ли фраза "должен описывать число"? И да, как можно переформулировать данный вопрос, чтобы его понял студент-младшекурсник? Можно сказать, что он должен описывать "множество чисел" или "подмножество чисел", но насколько это понятие популярно в среде младшекурсников - это остается для меня вопросом.
Для начала мне задали вопрос, по поводу одного тестового вопроса, который формировался таким образом - "В каких из заданных типов можно хранить число?". Вопрос этот был в рамках языка C++ и это довольно таки простой вопрос с простой формулировкой. Вариантами ответа были int, char, char[], float и еще пара других типов. Так вот, парень задавший мне вопрос выбрал, среди прочих, вариант char[] и аргументировал это тем, что в принципе в массиве можно хранить число.
Дело в том, что тест больше касался синтаксиса языка, и под "хранить" подразумевалась возможность написать нечто вида "X a = 22;", где X - имя типа (ну в общем случае, конечно). Очевидно, в рамках такого понятия - char[] полностью не подходит.
Однако, это приводит к самому вопросу о том, насколько размыто понятие "хранить" в голове программистов.
К примеру, я с позиций практика, который не так давно занимался оптимизацией недавно скажу что можно сделать memcpy числа в массив, взяв от числа адрес и сохранить там число. Неважно зачем я делаю это глупое действие - главное можно.
С более простой позиции обратится к первому элементу. и если число влезает - можно и записать число и хранить его. А можно так и сохранить в указатель. И при должном извращении то и в указатель на функцию. И вообще как угодно.
Обобщить обе эти позиции довольно легко. Понятие "хранить" в них означает, что для данных двух типов есть прямое сюръективное отображение и обратное отображение (биекция не обязательна).
А вот с синтаксической позицией - все просто. Подразумевается, что данный тип должен описывать число. Указатели с точки зрения семантики не описывают числа, массивы - тоже.
А теперь самое интересное - однозначна ли фраза "должен описывать число"? И да, как можно переформулировать данный вопрос, чтобы его понял студент-младшекурсник? Можно сказать, что он должен описывать "множество чисел" или "подмножество чисел", но насколько это понятие популярно в среде младшекурсников - это остается для меня вопросом.