2017-01-22 2 views
2

Я читал «Указатели на С» Кеннетом рейками и увидел эту строку:Что такое скалярная переменная в C?

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

Так что это значит?

Я нашел аналогичный вопрос на SO, но это было связанно с каким-либо другим языком (я предполагаю SQL)

Спасибо.

+0

Мнение основано, если книга не упоминает его явно. И если это так, вы должны просто продолжать читать. – StoryTeller

+1

«Скалярный» обычно означает не-вектор. В алгебре есть хорошее определение. В этом случае автор, вероятно, означает что-то, что не является массивом, единственным значением. – Sulthan

+0

Kenneth Reek имеет замечательную цитату на своей домашней странице: * Отладка в два раза сложнее написания кода в первую очередь. Поэтому, если вы пишете код настолько умно, насколько это возможно, вы по определению недостаточно умны, чтобы его отлаживать. Брайан Керниган * – chqrlie

ответ

3

Раздел 6.2.5 стандарта C11 объясняет:

Арифметические типы и типы указателей вместе называются скалярной типа. Типы массивов и структуры совместно называются агрегатами .

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

Ваше утверждение:

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

Непосредственно противоречит C-стандарту, поскольку структуры являются совокупными типами, не являющимися скалярами. Тем не менее, существуют ограниченные случаи, когда структуры обладают теми же свойствами, что и скаляры. Например, вы можете назначить две структуры одинакового типа, а конструктор-копир обеспечивает мелкую копию (назначение) между двумя структурами. Есть и другие обстоятельства, но обратите внимание, что они являются исключением, а не правилом.

Я подозреваю, что сделано заявление относительно одного из тех обстоятельств, когда struct можно рассматривать как скаляр для конкретной операции. Не зная, о чем идет речь, я не могу сказать дальше.

+0

Стандарт C иногда злоупотребляет математическими терминами. Указатели на самом деле не являются «скалярами», они являются графами в графах. Вы не можете добавить указатель на другой. –

+0

Согласен, я не думаю, что что-либо по линии скалярного определения абсолютно без исключения по всему стандарту. –

+1

Не уверен, что я должен спросить об этом здесь, но почему вопросы опущены без причины? Я не могу задавать больше вопросов, потому что мои предыдущие 2 вопроса (этот и тот, который я попросил год назад, не получили должным образом). Я новичок, и такие вещи не так очевидны для меня, как для людей с высокой репутацией на этом сайте.Я опубликовал только после проверки того, что аналогичный вопрос уже не был здесь. Чувствует себя плохо:/ –

0

В этом контексте скалярная переменная является переменной, которая содержит только одно значение за раз.

Смежные вопросы