'unsigned short var' и 'unsigned char var [2]' в C++

В C++ я могу объявить переменную либо как unsigned short, либо как unsigned char (с 2 байтами), как показано ниже. Однако есть ли отличия?

unsigned short p;
unsigned char q[2];

person Habibie    schedule 02.11.2017    source источник
comment
Одна вещь, о которой следует подумать, это то, что short не обязательно будет состоять из двух байтов или 16 бит.   -  person Some programmer dude    schedule 02.11.2017
comment
Есть отличия? Помимо того, что они совершенно разные типы? (массив против не массива, короткий против символа).   -  person Borgleader    schedule 02.11.2017
comment
Кроме того, почему вы спрашиваете? Какую проблему вы на самом деле пытаетесь решить?   -  person Some programmer dude    schedule 02.11.2017
comment
Это очень плохой вопрос. Пожалуйста, ознакомьтесь с некоторыми базовыми материалами по C++, прежде чем задавать вопросы.   -  person underscore_d    schedule 02.11.2017
comment
Endianess? Short — это многобайтовая величина, которая может быть представлена ​​в некоторых системах как старший значащий байт (MSB) первым или наименее значащий байт первым (LSB). Массив не имеет значимого порядка байтов.   -  person Thomas Matthews    schedule 02.11.2017
comment
@ThomasMatthews Я бессовестно включил вашу точку зрения в ответ. :)   -  person wally    schedule 02.11.2017
comment
Прочитав все ваши ответы выше, я начал понимать, что, возможно, можно с уверенностью сказать, что очевидная разница заключается в том, что первое представляет собой два байта целого числа, а второе - 2 байта символов.   -  person Habibie    schedule 02.11.2017
comment
Да. Просто попробуйте использовать их оба, чтобы делать что-то с числами в диапазоне unsigned short, и посмотрите, какой из них вам покажется самым простым. Тогда разница будет очевидна.   -  person underscore_d    schedule 02.11.2017


Ответы (1)


Отличия:

  • Типы разные. C++ — строго типизированный язык, и компилятор принудительно выполняет проверку типов.
  • Размер может отличаться. Мы знаем, что между элементами нет отступов, но эти две переменные могут иметь разный объем памяти, потому что размер short зависит от платформы.
  • Endianess. Short — это многобайтовая величина, которая может быть представлена ​​в некоторых системах как старший значащий байт (MSB) первым или наименее значащий байт первым (LSB). Массив char не имеет значимого порядка байтов.
  • Выравнивание. Массив char не может располагаться на одной из одних и тех же границ выравнивания. как short.
  • Псевдоним. short можно привести к массиву char, чтобы его можно было оценить как массив байтов, но обратное не допускается.
person wally    schedule 02.11.2017
comment
Еще 2: Выравнивание и сглаживание указателя. Вот почему брать указатель на массив символов и приводить его к указателю на что-либо очень и очень запрещено. - person user2394284; 02.11.2017