黑马程序员技术交流社区

标题: 刚学 问一个低端的问题 [打印本页]

作者: 颠倒的帕特玛    时间: 2014-9-6 22:19
标题: 刚学 问一个低端的问题
int size = sizeof(10);
printf("size=%d", size);
输出是4
把(10)换成 (char) 输出1
为什么 换成 ('a')输出为什么不是1 而是4呢?
作者: himym2005    时间: 2014-9-6 22:23
'a'是字符型,字符占一个字节。10是整型变量,占4个字节。
作者: 潘多拉    时间: 2014-9-6 22:39
c语言的看不太懂哦,这段时间一直在学习JAVA
作者: 3677065    时间: 2014-9-7 02:06
sizeof()返回的是数据类型所占字符数
作者: fantacyleo    时间: 2014-9-7 03:09
首先,不推荐使用sizeof(10) sizeof('a')这样的写法。因为sizeof的本意是求某个数据类型在内存中占据的字节数。在C语言中,字符常量被当做int类型,因此sizeof('a')相当于sizeof(int)。

建议使用sizeof时,直接指定数据类型,或者是变量名(因为变量在声明时是指定了类型的,不会出现把'a'当做int的情况)
作者: 陨石    时间: 2014-9-7 11:31
'a'会转成ascII码,然后转成int.
作者: ‍___________H    时间: 2014-9-7 11:37
fantacyleo 发表于 2014-9-7 03:09
首先,不推荐使用sizeof(10) sizeof('a')这样的写法。因为sizeof的本意是求某个数据类型在内存中占据的字节 ...

学习了~
作者: 小月格子猫    时间: 2014-9-7 14:34
这是xcode 得一个bug,我记得我上基础课的时候,老师专门说过这个问题
作者: 达摩八戒    时间: 2014-9-7 18:03
himym2005 发表于 2014-9-6 22:23
'a'是字符型,字符占一个字节。10是整型变量,占4个字节。

他的问题是 换成 ('a')输出为什么不是1 而是4呢?。。。。
作者: 达摩八戒    时间: 2014-9-7 18:05
可能是按照 ASCII表里字符常量对应的整数额。。。
作者: 王绍明    时间: 2014-9-7 20:52
用sizeof计算字符a查ASCII表,结果是4;char字符类型字节为1
作者: longshaocn    时间: 2014-9-7 23:08
'a'在存储的时候,使用的int类型,可以看下ASCII表!
作者: 颠倒的帕特玛    时间: 2014-9-8 08:24
fantacyleo 发表于 2014-9-7 03:09
首先,不推荐使用sizeof(10) sizeof('a')这样的写法。因为sizeof的本意是求某个数据类型在内存中占据的字节 ...

额  谢谢 得再接再厉了
作者: 小月格子猫    时间: 2014-9-11 01:26
fantacyleo 发表于 2014-9-7 03:09
首先,不推荐使用sizeof(10) sizeof('a')这样的写法。因为sizeof的本意是求某个数据类型在内存中占据的字节 ...

C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4字节。
这才是答案
作者: 小月格子猫    时间: 2014-9-11 03:21
小月格子猫 发表于 2014-9-11 01:26
C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4 ...

我从来都不相信别人说错了就是错了,我一般都是自己找答案,若是真错了,那便认,你若是
一上来,说c99标准规定,是这样的,我还会去查嘛,亲!
我之前为此也疑惑过,后来老师上课说了一下,我当时一听,原来是这样啊,也没深究
直到你说不是bug,我才找了一下资料,一看原来是这样
作者: zhuiyi007    时间: 2014-9-11 12:41
'a'是按照ascii码存的,所以长度不是字符类型的1
作者: 七年级生    时间: 2014-9-11 15:39
学习了,论坛就是好,自己不注意的小问题通过看帖子就能发现。
作者: 超越自己    时间: 2014-9-11 17:16
a在阿斯克码表里对应相应数值 所以是Int型。




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