【问题标题】:difference between sizeof('a') and sizeof("a")sizeof('a') 和 sizeof("a") 的区别
【发布时间】:2012-09-12 10:02:41
【问题描述】:

我的问题是关于 C 中的 sizeof 运算符。

sizeof('a'); 等于 4,因为它将 'a' 作为整数:97。

sizeof("a"); 等于 2:为什么? (int)("a") 也会给出一些垃圾值。为什么?

【问题讨论】:

  • char vs. integer vs. string :) "sizeof('a')" 恰好被提升为 "sizeof (int)"。我猜你已经知道为什么 "a\0" 是 "2" :) 我想你会明白为什么 (int)(SOME-STRING-ADDRESS) 会显示为 "垃圾" :)
  • 我会认为 sizeof('a') == 1 [same as sizeof(char) == 1] and sizeof("a") == 4 [same as sizeof(char *) == 4]。很有趣。
  • @Jens Gustedt - 不是重复的。除了“sizeof(字符文字)”之外,OP还在询问另外两个(直接相关,完全相关!)的事情。恕我直言...

标签: c sizeof


【解决方案1】:

'a' 是一个字符常量 - 在标准C 中属于int 类型 - 并且表示单个字符"a" 是一种不同的东西:它是一个 字符串文字,实际上由 两个 字符组成:a 和一个终止空字符。

字符串文字是char 的数组,有足够的空间容纳字符串中的每个字符和终止的空字符。因为sizeof(char)1,并且因为字符串文字是一个数组,所以sizeof("stringliteral") 将返回字符串文字中的字符元素数包括终止空字符。

'a'int 而不是 char 是标准 C 的一个怪癖,并解释了为什么 sizeof('a') == 4:这是因为 sizeof('a') == sizeof(int)。这不是在 C++ 中的情况,其中sizeof('a') == sizeof(char)

【讨论】:

  • 我知道这个问题被标记为 C,但我认为在 C++ 中指出这一点很有价值 sizeof('a') == 1(C 和 C++ 之间的重大变化之一)。
【解决方案2】:

因为 'a' 是一个字符,而 "a" 是一个字符串,由 'a' 字符后跟一个 null 组成。

【讨论】:

    猜你喜欢
    • 2016-04-01
    • 1970-01-01
    • 2017-03-12
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多