【问题标题】:sizeof('a') vs size('aa')sizeof('a') 与 size('aa')
【发布时间】:2013-03-05 00:02:01
【问题描述】:

我曾尝试通过 google 和 SO 进行研究,但我只能找到 resultssizeof('a') 类型为 int,因此应该给我 4 个字节,但是当我运行它时,我得到 1 个字节(我认为这可能是因为我拥有的链接是 C 而不是 C++ 的参考)。然而,这里有趣的是,当我输入 sizeof('aa') 时,我得到 4 个字节。 aa 之后的字符(例如 aaaaaaa)仍然给我 4 个字节。为什么随着更多字符的添加会突然增加 3 个字节并保持不变?还有为什么这里的 sizeof(int) 给了我 1 个字节?

谢谢!

【问题讨论】:

标签: c++ char int byte sizeof


【解决方案1】:

sizeof('a') 类型为int

'a'sizeof('a') 都不是int。在 C++ 中,单字符文字的类型为 charsizeof() 表达式的类型为 size_t

此外:

type int [...] 应该给我 4 个字节

不,int 不一定是 4 个字节长。

【讨论】:

  • 既然我们讨论的是 sizeof(),我还有一个问题。我注意到您说 int 不一定必须是 4 个字节长,所以我决定使用我的代码并测试类型 int 变量的范围。在这里我做了一个声明:int x = 18446744073709551615,它只有 2^64 或者换句话说 int 是 16 字节大小。那为什么 sizeof(int) 给我 4 个字节?同样根据learncpp.com/cpp-tutorial/24-integers,4 个字节的大小应该给我一个介于 -2,147,483,648 到 2,147,483,647 之间的范围。再次感谢!
  • 也许你应该解释一下aa
  • @JustinLiang "2^64 或者换句话说 int 是 16 字节大小。" - 什么? 64 位是 8 个字节,假设是 8 位字节。还是您的平台上的字节长为 4 位?另外,INT_MAXINT_MIN 的评估结果是什么?
  • 抱歉,我的意思是 64 位是 8 个字节。 INT_MAX 和 INT_MIN 分别计算为 -2,147,483,648 和 2,147,483,647。
  • @JustinLiang 然后我看不出这 8 个字节是什么。有了这些 INT_MAXINT_MINsizeof(int) 的值产生 4,int 100% 肯定肯定是 4 个字节长。
猜你喜欢
  • 1970-01-01
  • 2014-03-08
  • 2016-04-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多