黑马程序员技术交流社区
标题:
C语言中单引号中放多个字符,为什么也可以运行?
[打印本页]
作者:
hpuie0703
时间:
2016-2-4 16:43
标题:
C语言中单引号中放多个字符,为什么也可以运行?
# 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’,就会报错?
*/
作者:
曦正
时间:
2016-2-4 16:43
编译器问题吧?char底层是一个int类型的整数,我在Xcode运行,“AAAA”不会报错,如果输入的A太多,则会警告说输入的数太长,超过了一个char类型的位数;
就好像你定义一个float类型的数,你可以输入超过float精度的数,但是float只会保持在它精度范围内正确输出。
作者:
847374032
时间:
2016-2-13 00:54
首先C是个弱语法语言,如果输入多个'A'在一个''中 那么C语言会把他当成int类型储存 4个字符A是4字节 超过字节数内存溢出所以报错 个人见解
作者:
xiewenjian0313
时间:
2016-2-14 23:25
这样来说吧,我把你写的代码粘贴到我的xd上运行了一遍,这个不是报错事给你一个警告。你现在是char类型字符常量初始化为a,计算机编译器遇到s时会将其转换为相应的编码值。相信你也知道char类型是用于储存字母和标点符号之类的字符,但是技术实现上char确实整数类型,char类型实际储存的是正数的而不是字符。这个就是报错的原因。哎呀,其实为也是小白,为了回答你的问题,特意翻看了10分钟的专业书籍,终于算是表达出来了,还望给分。我也是才看c语言视频几天而已,进度之缓慢,实在令人汗颜。期待你我共勉,共进就业班1
作者:
xiyecao
时间:
2016-2-17 10:24
五个A超出了char类型一个字符的长度所以报错
只输出最后一个A是因为在c编译原理定义: ''里面只能写字符,你写多个字符时,后面输入的会把前面输入的在缓冲区内冲掉.所以你看到的永远是最后一个输入的内容。
昨天看到单引号双引号区别顺便也说一下,他们俩的含义和大小不同
单引号引起的一个字符代表一个整数,整数值对应于该字符在ASCII字符集中的序列值;
双引号引起的都是字符串,哪怕只有一个字符也是字符串,双引号引起的一个字符代表一个指向无名数组起始字符的指针;
比如:'.'代表十进制46,十六进制0x2E;而"."代表指向起始字符为"."的某数组的指针;
单引号引起的一个字符大小就是一个字节;
双引号引起的一个字符大小是两个字节,因为双引号引起的字符串会在字符串的末尾添加一个0x00作为字符串的结束标识。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2