#c #struct #sizeof
Вопрос:
Предположим, что у вас есть структура my_struct
в C. Затем вы используете sizeof(my_struct)
ее, чтобы узнать, сколько байтов у этой структуры. Есть ли какой-нибудь способ узнать, что my_struct
это структура, просто используя sizeof()
метод в C?
Например, если я хочу это выяснить my_variable
16-bit
, то просто проверяю, так ли sizeof(my_variable) == 2
это .
Могу ли я сделать то же самое для struct в C?
Комментарии:
1. Конечно, нет, потому что можно иметь структуру размером, скажем, 2.
2. Нет. Зачем тебе вообще это нужно? Это ваш код, и вы знаете, что это за тип.
3. Если бы такая функция самоанализа существовала,
sizeof
для нее не было бы места (как «это структура?» связано с вопросом «насколько велика эта штука в байтах?»). Я не знаю о такой языковой особенности. Но мне любопытно, если бы он существовал , для чего бы вы его использовали?4. Проверка того, что ваша переменная имеет размер 2 и «таким образом» 16 бит, все равно ничего не значит в C. Это короткая, короткая без знака, (очень короткая) строка, структура из 2 символов?
5. @Alexander, скажем, в Python, вы можете использовать проверку того, является ли значение целым числом или плавающей точкой, и передать его через другой поток управления в зависимости от результата. Хотя я все равно не могу придумать для этого действительно веской причины. Возможно, оперативная группа думает в этом направлении.
Ответ №1:
Могу ли я сделать то же самое для struct в C?
sizeof(my_variable)
делает то же самое для структур, что и для неструктур.
Конкретно,
sizeof( my_variable ) == 2
это не значит, что переменная использует 16 бит.Это означает, что my_variable использует до 2 байт. Несмотря на то, что в наши дни размер байта обычно составляет 8 бит, это не всегда так. Исторически сложилось так, что их размер достигал 32 бит!
sizeof( my_variable ) == 2
это не означает, что переменная может хранить 16-битные числа.sizeof
ничего не говорит о типе, кроме его размера.
Например,
sizeof( long )
sizeof( float )
и sizeof( struct { char a; int b; } )
все они могли бы вернуть один и тот же номер.