【问题标题】:How to find if the data type is a struct?如何查找数据类型是否为结构?
【发布时间】:2021-12-16 09:44:41
【问题描述】:

假设您在 C 中具有结构 my_struct。 然后您使用sizeof(my_struct) 来查找该结构有多少字节。有什么方法可以通过在 C 中使用 sizeof() 方法来找出 my_struct 是一个结构?

例如,如果我想知道my_variable16-bit,那么我只需检查sizeof(my_variable) == 2

我可以对 C 中的 struct 做同样的事情吗?

【问题讨论】:

  • 当然不是,因为可能有一个大小为 2 的结构。
  • 没有。为什么你甚至想这样做?这是你的代码,你知道类型是什么。
  • 如果确实存在这样的自省功能,sizeof 将不适合它(“这是一个结构吗?”与“这个东西有多大以字节为单位”的问题有关?”)。我不知道这种语言功能。但我很好奇,如果它确实存在,你会用它做什么?
  • 检查您的变量的大小是否为 2 并且“因此”为 16 位,在 C 中仍然没有任何意义。它是一个短的、无符号的短的、(非常短的)字符串, 2个字符的结构?
  • @Alexander 在 Python 中,您可以使用检查值是整数还是浮点数,并根据结果将其传递给不同的控制流。尽管无论如何我都想不出一个真正好的理由。也许 OP 正在沿着这些思路思考。

标签: c struct sizeof


【解决方案1】:

我可以对 C 中的 struct 做同样的事情吗?

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; } ) 都可以返回相同的数字。

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 2020-08-28
    • 2014-06-22
    • 2019-12-21
    • 2020-11-21
    • 2012-08-01
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多