Chinaunix

标题: char 字符所占的空间 [打印本页]

作者: yashuer1989    时间: 2013-09-16 09:07
标题: char 字符所占的空间
本帖最后由 yashuer1989 于 2013-09-16 09:52 编辑

先看一组声明:
                 char ch='a' , s[]="abcdefg";
开始程序了:
    sizeof('a')=4            
    sizeof(ch)=1
    sizeof(s)=8              
    sizeof(s[1])=1         

分析 :
    根据c语言的类型转换规则, char 类型在表达式 会自动升级为 int 的。所以 sizeof('a')=4;
  但是 为什么  sizeof(s[1])=1,  s[1] 不是一个char类型的?。
为什么  sizeof('a')  不等于 sizeof(ch)  ?
而且  if(ch=='a')
           printf("\n  equal \n");  是不会打印 equal 的。

各位不好意思,上面的代码有错误,现修改如下
作者: __slucx__    时间: 2013-09-16 09:13
sizeof(ch)=4


你确定sizeof(ch)是4?
作者: lin5161678    时间: 2013-09-16 09:13
胡说八道

先看一组声明:
                 char ch='a' , s[]="abcdefg";
开始程序了:
    sizeof(ch)=4            (1)
这里sizeof ch求值的结果必然是 1
没有其他可能

作者: hellioncu    时间: 2013-09-16 09:14
你什么环境能得出sizeof(ch)=4?
作者: yashuer1989    时间: 2013-09-16 09:17
本帖最后由 yashuer1989 于 2013-09-16 09:27 编辑

回复 2# __slucx__


    程序显示如此!

错了!1
作者: yashuer1989    时间: 2013-09-16 09:19
回复 4# hellioncu


    gcc (Debian 4.7.2-5) 4.7.2

作者: bruceteen    时间: 2013-09-16 09:38
只听说过
在C++语言中,sizeof('c') == 1
在C语言中,sizeof('c') == sizeof(int)
作者: myworkstation    时间: 2013-09-16 10:26
回复 1# yashuer1989


    在C中类似这样的'a'对象是integer character constant,integer character constant可以由一个或多个字符组成,多个字符的值由编译实现来决定,integer character constant的类型为int。直白的说只有字符是字面常量时其长度为sizeof(int)。C++与C类似,但称呼不一样,C++中叫character literal,在C++中如果character literal只由一个字符组成那么其类型为char,否则(多于一个字符如'ab')其类型为int。
作者: lin5161678    时间: 2013-09-16 12:04
sizeof('a')=4
没什么转换
字符常量的数据类型是 int
一直都是


作者: 幻の上帝    时间: 2013-09-17 06:55
回复 8# myworkstation


……虽然能明白意思,不过请注意用词。'a'不是对象。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2