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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 颠倒的帕特玛 中级黑马   /  2014-9-6 22:19  /  2166 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int size = sizeof(10);
printf("size=%d", size);
输出是4
把(10)换成 (char) 输出1
为什么 换成 ('a')输出为什么不是1 而是4呢?

评分

参与人数 2技术分 +1 黑马币 +15 收起 理由
★彬★卍囧神 + 1
fantacyleo + 15 再低端的问题都比水帖强

查看全部评分

20 个回复

倒序浏览
'a'是字符型,字符占一个字节。10是整型变量,占4个字节。
回复 使用道具 举报
c语言的看不太懂哦,这段时间一直在学习JAVA
回复 使用道具 举报
sizeof()返回的是数据类型所占字符数
回复 使用道具 举报
首先,不推荐使用sizeof(10) sizeof('a')这样的写法。因为sizeof的本意是求某个数据类型在内存中占据的字节数。在C语言中,字符常量被当做int类型,因此sizeof('a')相当于sizeof(int)。

建议使用sizeof时,直接指定数据类型,或者是变量名(因为变量在声明时是指定了类型的,不会出现把'a'当做int的情况)

点评

学习了!  发表于 2014-9-7 10:05
回复 使用道具 举报 1 0
'a'会转成ascII码,然后转成int.
回复 使用道具 举报
fantacyleo 发表于 2014-9-7 03:09
首先,不推荐使用sizeof(10) sizeof('a')这样的写法。因为sizeof的本意是求某个数据类型在内存中占据的字节 ...

学习了~
回复 使用道具 举报
这是xcode 得一个bug,我记得我上基础课的时候,老师专门说过这个问题

点评

跟xcode没关系,也不是bug。这是C语言标准规定的  发表于 2014-9-7 16:39
回复 使用道具 举报
himym2005 发表于 2014-9-6 22:23
'a'是字符型,字符占一个字节。10是整型变量,占4个字节。

他的问题是 换成 ('a')输出为什么不是1 而是4呢?。。。。
回复 使用道具 举报
可能是按照 ASCII表里字符常量对应的整数额。。。
回复 使用道具 举报
用sizeof计算字符a查ASCII表,结果是4;char字符类型字节为1
回复 使用道具 举报
'a'在存储的时候,使用的int类型,可以看下ASCII表!
回复 使用道具 举报
颠倒的帕特玛 来自手机 中级黑马 2014-9-8 08:24:18
13#
fantacyleo 发表于 2014-9-7 03:09
首先,不推荐使用sizeof(10) sizeof('a')这样的写法。因为sizeof的本意是求某个数据类型在内存中占据的字节 ...

额  谢谢 得再接再厉了
回复 使用道具 举报
fantacyleo 发表于 2014-9-7 03:09
首先,不推荐使用sizeof(10) sizeof('a')这样的写法。因为sizeof的本意是求某个数据类型在内存中占据的字节 ...

C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4字节。
这才是答案

点评

看来你已经认识到你之前归因于“Xcode的bug”是不正确的。另外,C标准并没有规定32位机器上的int一定是4字节,而只是规定了int类型的最小取值范围  发表于 2014-9-11 02:49
回复 使用道具 举报
小月格子猫 发表于 2014-9-11 01:26
C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4 ...

我从来都不相信别人说错了就是错了,我一般都是自己找答案,若是真错了,那便认,你若是
一上来,说c99标准规定,是这样的,我还会去查嘛,亲!
我之前为此也疑惑过,后来老师上课说了一下,我当时一听,原来是这样啊,也没深究
直到你说不是bug,我才找了一下资料,一看原来是这样
回复 使用道具 举报
'a'是按照ascii码存的,所以长度不是字符类型的1
回复 使用道具 举报
学习了,论坛就是好,自己不注意的小问题通过看帖子就能发现。
回复 使用道具 举报
a在阿斯克码表里对应相应数值 所以是Int型。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马