【问题标题】:sizeof in c program output [duplicate]c程序输出中的sizeof
【发布时间】:2013-06-04 04:34:10
【问题描述】:

问题陈述:-

以下程序的输出是什么?

main( ) 
{ 
 printf ( "\n%d%d", sizeof ( '3' ), sizeof ( "3" ), sizeof ( 3 ) ) ; 
}

我正在使用 32 位 gcc 编译器。它正在将输出打印为-

4, 2, 4

我很困惑为什么它为sizeof ( '3' ) 打印4。 3 是单引号,所以它是一个字符,对吗?那么它不应该打印出4吗?我说的对吗?

【问题讨论】:

  • -1。在那个printf 字符串中只有两个%d 并且没有逗号,所以这不是输出。请不要解释结果。
  • 您在printf 中缺少一个%d,它应该是printf("%d%d%d",...)
  • @Potatoswatter,我认为“单引号”的意思是“撇号”或“单引号”。有些东西告诉我英语不是他/她的第一语言。
  • @CarlNorum 不,我的意思是在格式字符串中。仔细看程序,看看输出。
  • 哦,明白了。是的,字符文字上的“智能引号”是另一个赠品。

标签: c char sizeof


【解决方案1】:

字符文字是 C 中的整数。这意味着 sizeof('3')sizeof(int) 相同。在你的机器上,它看起来像 4

编者注:

  1. 打印sizeof 结果时不要使用%d 作为格式字符串。 sizeof 返回一个size_t,所以你应该改用%zu

  2. 您应该为main 使用正确的原型。即:int main(void)int main(int argc, char **argv)。不仅仅是main()

  3. 如果您为main 使用正确的原型,请确保您的程序返回一些内容。以return 0; 为例。

【讨论】:

  • 这个“3”考虑了什么?为什么是 2 号?
  • "3" 是一个字符串文字。它包含两个字符 - '3' 和终止 '\0'(空)字符。
  • 即使为 sizeof ("\0") [它给出 2],也会添加 null '?
  • 是的,这是一个包含两个 '\0' 字符的字符串文字。正如您所发现的,字符串文字不一定是字符串。
  • sizeof 是如何工作的? (计算大小[这里包括“\0”])[sizeof 在编译时计算结果],但我不明白。?
猜你喜欢
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多