char a='y';printf("%c\n",a);运行这一段输出是y,嗯这个没问题但把y改成yes,输出的为什么是s
2 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
你是这样改的吗 char a = 'yes'; 并且只改了这里吗?
单引号括起来的应该表示一个字符,所以一般你应该在里面只放一个字母。
但其实 C 语法允许在单引号内放一个以上字符,这样它表示一个 int 值。但如何确定它的值是标准未指定的(也就是由各个实现自己决定)。
因为这是实现相关的,我只能根据你的结果进行推测:
很有可能,你的编译器将 'yes' 这样的多字符写法实现为“把这个字符序列按 int 的大小截断”。那么这个 int 值的低位字节就是字符 's'。 而等于号右侧作为一个 int 值在为等于号左侧的 char 提供初值时也会截断,只取低地址位。所以 a 得到的是表示字符 's'的值。 后面 printf 就打印出 s。
上述斜体内容如果看不懂也没关系。你只要知道单引号主要用于表示一个字符,别写 'yes' 这样的。 说明下:并不是说单引号内只能放一个,而是只能放“表示一个字符”的内容。比如可以用转义字符来表示一个字符,像是 '\n' '\0' 之类的,这时引号内自然会有多个字。
顺便说一下:
如果想表示字符串,就要用双引号括起来,如 "yes"。 printf 打印字符串的格式化指示符是 %s,如 printf("%s", "yes");
- 2 回答
- 1 关注
- 1854 浏览
添加回答
举报
0/150
提交
取消