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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
# include <stdio.h>

int main(void)
{
        char ch1 = 'A';
        printf("%c\n", ch1);
        char ch2 = 'AA';
        printf("%c\n", ch2);
        char ch3 = 'AAA';
        printf("%c\n", ch3);
        char ch4 = 'AAAA';
        printf("%c\n", ch4);
       
        return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
A
A
A
A
————————————
总结:
1. 为什么'AA', 'AAA', 'AAAA'都不报错,并且输出结果都是A?
2.若是加上‘AAAAA’,就会报错?
*/

最佳答案

查看完整内容

编译器问题吧?char底层是一个int类型的整数,我在Xcode运行,“AAAA”不会报错,如果输入的A太多,则会警告说输入的数太长,超过了一个char类型的位数; 就好像你定义一个float类型的数,你可以输入超过float精度的数,但是float只会保持在它精度范围内正确输出。

4 个回复

倒序浏览
编译器问题吧?char底层是一个int类型的整数,我在Xcode运行,“AAAA”不会报错,如果输入的A太多,则会警告说输入的数太长,超过了一个char类型的位数;
就好像你定义一个float类型的数,你可以输入超过float精度的数,但是float只会保持在它精度范围内正确输出。
回复 使用道具 举报
首先C是个弱语法语言,如果输入多个'A'在一个''中  那么C语言会把他当成int类型储存  4个字符A是4字节  超过字节数内存溢出所以报错  个人见解
回复 使用道具 举报
这样来说吧,我把你写的代码粘贴到我的xd上运行了一遍,这个不是报错事给你一个警告。你现在是char类型字符常量初始化为a,计算机编译器遇到s时会将其转换为相应的编码值。相信你也知道char类型是用于储存字母和标点符号之类的字符,但是技术实现上char确实整数类型,char类型实际储存的是正数的而不是字符。这个就是报错的原因。哎呀,其实为也是小白,为了回答你的问题,特意翻看了10分钟的专业书籍,终于算是表达出来了,还望给分。我也是才看c语言视频几天而已,进度之缓慢,实在令人汗颜。期待你我共勉,共进就业班1
回复 使用道具 举报
五个A超出了char类型一个字符的长度所以报错

只输出最后一个A是因为在c编译原理定义: ''里面只能写字符,你写多个字符时,后面输入的会把前面输入的在缓冲区内冲掉.所以你看到的永远是最后一个输入的内容。

昨天看到单引号双引号区别顺便也说一下,他们俩的含义和大小不同
单引号引起的一个字符代表一个整数,整数值对应于该字符在ASCII字符集中的序列值;
双引号引起的都是字符串,哪怕只有一个字符也是字符串,双引号引起的一个字符代表一个指向无名数组起始字符的指针;
比如:'.'代表十进制46,十六进制0x2E;而"."代表指向起始字符为"."的某数组的指针;
单引号引起的一个字符大小就是一个字节;
双引号引起的一个字符大小是两个字节,因为双引号引起的字符串会在字符串的末尾添加一个0x00作为字符串的结束标识。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马