标题:‘a’不是应该是int类型吗?求大侠解惑。
只看楼主
powerfrank
Rank: 2
等 级:论坛游民
帖 子:31
专家分:37
注 册:2018-4-25
结帖率:80%
已结贴  问题点数:20 回复次数:18 
‘a’不是应该是int类型吗?求大侠解惑。
#include <stdio.h> /*编译预处理命令 标准输入输出头文件 */
#include <stdlib.h> /*编译预处理命令 标准库头文件 */

int main(void) /* 主函数 */
{
    char c;/* 定义c为字符变量 */

    printf("%d %d %d\n", sizeof 'a' , sizeof (char) , sizeof c );/* 输出三个值并换行 */

    system("PAUSE"); /* 从程序中调用“PAUSE”命令 */

    return 0; /* 返回0值 */
}

运行结果是

1   1   1

预想的结果是

4    1    1

‘a’不是应该是int类型吗?值应该是 4 啊,为何会是 1 呢?哪位大侠帮忙解解惑。
搜索更多相关主题的帖子: int 类型 命令 sizeof PAUSE 
2018-11-07 17:56
Tomorrw_I
Rank: 10Rank: 10Rank: 10
等 级:禁止访问
威 望:6
帖 子:406
专家分:1712
注 册:2018-10-16
得分:1 
'a'   这是字符!!!!
"a"   这是字符串!!!!

学C有用吗?
学C++有前途吗?
数据库有必要学吗?
……
别问,你还什么都不会,学就对了
……
2018-11-07 18:03
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:1 
'a' char类型

[此贴子已经被作者于2018-11-7 19:05编辑过]

2018-11-07 18:17
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
得分:1 
1.看你的代码,注释挺多的,也很细节,想必你是初学者。
建议你注意代码的细节之处:    printf("%d %d %d\n", sizeof('a') , sizeof (char) , sizeof(c) );/* 输出三个值并换行 */
该加括号的记得加上括号,养成良好的习惯,避免运行程序时出现不可预知的错误。跑你的程序,电脑崩溃了两次,修改后就没事了。

2.我用VC6.0跑,结果是4    1    1,不知道你是用什么运行的。

126邮箱联系方式:no1xijin@126. com
2018-11-07 19:50
powerfrank
Rank: 2
等 级:论坛游民
帖 子:31
专家分:37
注 册:2018-4-25
得分:0 
回复 4楼 no1xijin
我用visual studio 2012跑的。

我的理解是 'a' 相当于是十进制97,是个常量。这个值所在的内存地址应该是被定义为int类型。

现在int类型一般是4个字节32位。

跑出1,这把我整懵了。难道我理解有误?

[此贴子已经被作者于2018-11-7 21:06编辑过]

2018-11-07 21:03
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:395
专家分:2640
注 册:2018-3-30
得分:1 
我电脑上Dev-C++运行结果 4 1 1

saber,别哭.
2018-11-07 22:02
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:10 
C 是 int
C++ 是char
你看看你的文件后缀名是什么
收到的鲜花
  • rjsp2018-11-08 09:06 送鲜花  1朵  

https://zh.
2018-11-08 00:37
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
以下是引用no1xijin在2018-11-7 19:50:46的发言:

1.看你的代码,注释挺多的,也很细节,想必你是初学者。
建议你注意代码的细节之处:    printf("%d %d %d\n", sizeof('a') , sizeof (char) , sizeof(c) );/* 输出三个值并换行 */
该加括号的记得加上括号,养成良好的习惯,避免运行程序时出现不可预知的错误。跑你的程序,电脑崩溃了两次,修改后就没事了。

2.我用VC6.0跑,结果是4    1    1,不知道你是用什么运行的。

加不加都行 不会造成什么不可预知的错误
你的崩溃 和 这个修改没关系

https://zh.
2018-11-08 00:38
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
以下是引用zbjzbj在2018-11-7 18:17:34的发言:

'a' char类型

你弄错了

https://zh.
2018-11-08 00:38
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:1 
以下是引用powerfrank在2018-11-7 21:03:45的发言:

我用visual studio 2012跑的。

我的理解是 'a' 相当于是十进制97,是个常量。这个值所在的内存地址应该是被定义为int类型。

现在int类型一般是4个字节32位。

跑出1,这把我整懵了。难道我理解有误?

理解的确错了
'a'是97
但是 这个不能推导出 'a'是int
97 一样可以是一个char类型的数据
char是一种整型


'a'是int的唯一原因是 语法这样规定
没有了 没什么特别的
C++里面就换一个规定 'a'是char

https://zh.
2018-11-08 00:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491061-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013898 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved