黑马程序员技术交流社区

标题: 关于sizeof的用法 [打印本页]

作者: 魏建国    时间: 2015-3-28 10:01
标题: 关于sizeof的用法
昨天学到sizeof,就随便敲代码测试了一下,最后发现  int a = sizeof('1'),输出a的值竟然是4,‘1’这个不是字符吗,咋是4字节啦。求大神来解答:dizzy:


作者: hellooc    时间: 2015-3-28 15:22
这么神奇?我的感觉不是你错了就是编译器问题
作者: 枫宇翔    时间: 2015-3-28 16:45
好神奇的样子啊
作者: 非我,非非我    时间: 2015-3-28 16:51
刚编译了一下,a的值是1,估计编译器有问题、、
作者: yafengxn    时间: 2015-3-28 17:14
应该不会,楼主查下哪里有问题
作者: 魏建国    时间: 2015-3-28 18:03
非我,非非我 发表于 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, 下载次数: 43)

520498B1-D185-4AE7-92AB-F71FD20842D9.png

作者: Dreamsky_qihang    时间: 2015-3-28 23:34
你可以去编译器的函数库里去看看。sizeof函数的具体是怎么实现的,也许会知道其中的原因
作者: chenlanaq    时间: 2015-3-29 10:44
你没有指定'1'是char,应该就是int了啊。
作者: David88    时间: 2015-3-29 12:06
sizeof本来求的就是字节数
作者: oucding    时间: 2015-3-29 12:13
chenlanaq 发表于 2015-3-29 10:44
你没有指定'1'是char,应该就是int了啊。

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

作者: 流风124    时间: 2015-3-29 16:52
狂甩你十八条街 发表于 2015-3-29 15:18
我觉得应该是编译器的问题,我写了两句测试代码,结果就是1
        char b = '1';
        int a = sizeof ...

你定义了一个char类型的变量来存储该字符,结果是1,但lz的意思是直接输出sizeof('1')的时候,结果是4,我觉得不是编译器的问题
作者: chnvi    时间: 2015-3-29 17:18
用终端试试呢。不用xcode里面那个
作者: 狂甩你十八条街    时间: 2015-3-29 18:08
流风124 发表于 2015-3-29 16:52
你定义了一个char类型的变量来存储该字符,结果是1,但lz的意思是直接输出sizeof('1')的时候,结果是4, ...

我每种数据类型都试了一遍,只有单个字符结果异常,一直都是4。我用的是xcode6.2,我也整不明白了,坐等大神吧。-_-#
作者: 风筝1025    时间: 2015-3-29 19:08
可能是你直接将‘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
提示: 作者被禁止或删除 内容自动屏蔽
作者: 一步一个脚印    时间: 2015-3-30 00:27
我觉得应该是sizeof(‘2’)这种情况下,字符以常量形式出现,它的实质是一个小整型,编译器会将这个小整型数当成int类型  。
作者: Fench    时间: 2015-3-31 12:13
C中字符常量占4个字节, C++中占1个字节.
也就是活你文件后缀.c编译结果是4, .cpp编译出来是1.
你想计算'a' 可以强制转换类型.  a= sizeof((char)'a'); 这样输出就是1了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2