首页 > 试题广场 >

编译和执行如下代码,系统将会输出什么?

[单选题]
编译和执行如下c语言代码,系统将会输出什么?
#include <stdio.h>
int main() {
    char c = '0';
    printf("%d %d", sizeof(c), sizeof(char));
    return 0;
}

  • 1 4
  • 2 2
  • 1 1
  • 2 1
推荐
以下答案由牛友 @洛阳雪 提供,谢谢@洛阳雪(咋蓝不了....不好意思哈): 
  
C语言: char a = 'a'; sizeof(char) = 1 sizeof(a) = 1 sizeof('a') = 4 
C++语言: char a = 'a'; sizeof(char) = 1 sizeof(a) = 1 sizeof('a') = 1 
字符型变量是1字节这个没错,奇怪就奇怪在C语言认为'a'是4字节,而C++语言认为'a'是1字节。 
     
原因如下:  
  C99标准的规定,'a'叫做整型字符常量(integer    character constant),被看成是int型,所以在32位机器上占4字节。
  ISO C++标准规定,'a'叫做字符字面量(character literal),被看成是char型,所以占1字节
编辑于 2017-09-28 12:43:43 回复(17)
sizeof(c)永远是1,因为sizeof是计算其类型的大小,类型为char,结果必然是1;
sizeof('0')的结果取决于‘0’的类型,c++中‘0’为字符常量,类型为char,结果为1,
如果是sizeof('02'),C++中‘02’为整型字符常量,为int类型,结果为4.
发表于 2015-12-14 09:09:10 回复(2)
说不定会有兄弟选D
选D的原因是因为想到了
一个字符数组char c[] = "abcsd" 此时sizeof(c) 的结果为 6,因为字符串后面有一个'\0',名为字符串结束符,而题目中仅为单个字符 因此sizeof(c) = sizeof(char) = 1
发表于 2019-05-12 14:19:03 回复(1)
C++运行结果:
C运行结果:

好神奇~~
发表于 2017-03-12 10:34:06 回复(5)
C语言: char a = 'a'; sizeof(char) = 1 sizeof(a) = 1 sizeof('a') = 4 
C++语言: char a = 'a'; sizeof(char) = 1 sizeof(a) = 1 sizeof('a') = 1 
字符型变量是1字节这个没错,奇怪就奇怪在C语言认为'a'是4字节,而C++语言认为'a'是1字节。 
     
原因如下:  
  C99标准的规定,'a'叫做整型字符常量(integer    character constant),被看成是int型,所以在32位机器上占4字节。
  ISO C++标准规定,'a'叫做字符字面量(character literal),被看成是char型,所以占1字节

发表于 2016-03-03 10:24:52 回复(0)
字符常量有两种:一种是普通字符,即用单撇号括起来的一个字符,如'b' ,'y',‘?’。另一种是转义字符,即特殊字符常量。
字符常量在内存中占4个字节,存放的是字符的ASCII码(整型数据)。C语言规定所有字符常量都作为整型量来处理。
所以答案为A.
发表于 2016-03-08 15:32:20 回复(0)
A
sizeof 运算符主要用于计算占用内存( stack 而不是 heap )的大小, char 占用一个字节。
编辑于 2015-12-17 12:18:48 回复(0)
是求字符常量的大小,大家看清楚题目了,如果是字符串的话应该不同
发表于 2017-08-28 15:44:09 回复(0)
这个应该跟编译器有关系吧,linux下是1,4 VS2012下运行是1,1
编辑于 2016-03-12 21:22:40 回复(3)
题目都写了是c语言代码,说一堆c++干什么?
发表于 2016-05-30 23:50:05 回复(0)
sizeof()确定数据类型大小
发表于 2019-09-06 14:54:34 回复(0)
那个我用c语言是 1 1诶。。。。。。
发表于 2018-08-01 23:45:08 回复(0)
所以答案不应该是a吗?
发表于 2017-07-10 15:55:58 回复(0)

图片说明

vs2013下编译的,我觉得是1,编译结果出来也是1。所以答案是什么呢?

发表于 2017-03-30 19:41:37 回复(0)
c语言和c++对'a'认定不同 前者4字节
发表于 2017-02-24 10:34:26 回复(0)
为什么我用code::blocks跑出来是两个1
发表于 2017-02-20 18:01:40 回复(0)
C99标准的规定,'a'叫做整型字符常量(integer    character constant),被看成是int型,所以在32位机器上占4字节。
  ISO C++标准规定,'a'叫做字符字面量(character literal),被看成是char型,所以占1字节
发表于 2016-09-25 07:42:30 回复(1)
C
发表于 2016-08-28 09:38:03 回复(0)
sizeof(c)永远是1,因为sizeof是计算其类型的大小,类型为char,结果必然是1;
sizeof('0')的结果取决于‘0’的类型,c++中‘0’为字符常量,类型为char,结果为1,
如果是sizeof('02'),C++中‘02’为整型字符常量,为int类型,结果为4.
发表于 2016-07-06 13:22:10 回复(0)
在c语言环境下,‘0’被看作是整形,故sizeof后是4个字节。
发表于 2016-05-16 13:22:50 回复(0)
在C++上运行的时候,sizeof(‘0’)为1,sizeof(‘2’)或者其他数字的时候为4
发表于 2016-03-17 15:25:18 回复(1)