A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏建国 中级黑马   /  2015-3-28 10:01  /  2017 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

昨天学到sizeof,就随便敲代码测试了一下,最后发现  int a = sizeof('1'),输出a的值竟然是4,‘1’这个不是字符吗,咋是4字节啦。求大神来解答:dizzy:

18 个回复

倒序浏览
这么神奇?我的感觉不是你错了就是编译器问题
回复 使用道具 举报
好神奇的样子啊
回复 使用道具 举报
刚编译了一下,a的值是1,估计编译器有问题、、
回复 使用道具 举报
应该不会,楼主查下哪里有问题
回复 使用道具 举报
非我,非非我 发表于 2015-3-28 16:51
刚编译了一下,a的值是1,估计编译器有问题、、

我用得是用Xcode里面.c文件,编译结果就是4,我设置 char b ='1',然后打印sizeof(b)输出值是1,直接打印sizeof('1')的值是4.像下面的图一样:

520498B1-D185-4AE7-92AB-F71FD20842D9.png (74.23 KB, 下载次数: 48)

520498B1-D185-4AE7-92AB-F71FD20842D9.png
回复 使用道具 举报
你可以去编译器的函数库里去看看。sizeof函数的具体是怎么实现的,也许会知道其中的原因
回复 使用道具 举报
你没有指定'1'是char,应该就是int了啊。
回复 使用道具 举报
sizeof本来求的就是字节数
回复 使用道具 举报
chenlanaq 发表于 2015-3-29 10:44
你没有指定'1'是char,应该就是int了啊。

不应该啊,这怎么回事呀
回复 使用道具 举报
我觉得也是由于没有指定char类型,按照int类型来算了,毕竟存储的是其ACSII码,默认的话应该是按照int型的吧,我这里又试了一下sizeof("1"),结果是2,这应该是因为计算机认为这是字符串,按照字符串来计算其所占字节数,但是字符的话,如果不指定char类型,结果就是4
回复 使用道具 举报
我觉得应该是编译器的问题,我写了两句测试代码,结果就是1
        char b = '1';
        int a = sizeof(b);
        printf("%d \n", a);
回复 使用道具 举报
狂甩你十八条街 发表于 2015-3-29 15:18
我觉得应该是编译器的问题,我写了两句测试代码,结果就是1
        char b = '1';
        int a = sizeof ...

你定义了一个char类型的变量来存储该字符,结果是1,但lz的意思是直接输出sizeof('1')的时候,结果是4,我觉得不是编译器的问题
回复 使用道具 举报
chnvi 中级黑马 2015-3-29 17:18:21
14#
用终端试试呢。不用xcode里面那个
回复 使用道具 举报
流风124 发表于 2015-3-29 16:52
你定义了一个char类型的变量来存储该字符,结果是1,但lz的意思是直接输出sizeof('1')的时候,结果是4, ...

我每种数据类型都试了一遍,只有单个字符结果异常,一直都是4。我用的是xcode6.2,我也整不明白了,坐等大神吧。-_-#
回复 使用道具 举报
可能是你直接将‘a’作为sizeofd的变量,编译器把他看作是一个字符串对象了。
  1. #include <stdio.h>

  2. int main(void){
  3.        
  4.         char a='1';
  5.         char b[]="'a'";
  6.         printf("%d\n",sizeof(a));
  7.         printf("%d\n",sizeof('a'));
  8.         printf("%d\n",sizeof(b));
  9.         return 0;
  10. }
复制代码

回复 使用道具 举报
So然后 2015-3-29 20:03:34
17#
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
我觉得应该是sizeof(‘2’)这种情况下,字符以常量形式出现,它的实质是一个小整型,编译器会将这个小整型数当成int类型  。
回复 使用道具 举报
Fench 中级黑马 2015-3-31 12:13:46
19#
C中字符常量占4个字节, C++中占1个字节.
也就是活你文件后缀.c编译结果是4, .cpp编译出来是1.
你想计算'a' 可以强制转换类型.  a= sizeof((char)'a'); 这样输出就是1了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马