字符常量:一个用单引号括起来的单个字符(或字符转义序列或三字母词)
实质(含义):是一个整形值。属于四大基本数据类型(分别是整型,浮点型,指针,聚合类型)中的整型(integers)。
如‘a’, ‘\n’, ‘??!’, ‘\24’
针对上面四个例子逐一讲解:
1. 第一个’a’似乎没什么好说的,严格满足定义。(有一点想说一下,’abc’到底算不算字符常量呐?在《C与指针》中说这种情况属于多字节字符常量,并不违反标准,但由于在不同环境下可能不一样,并不鼓励使用。我在VC上试了一下,含有’abc’的程序的确可以运行,不过它对应的整形数据等于’c'(即尾字母对应的整形数据)
2. 第二个’\n’牵扯到字符转义序列,转义序列由一个反斜杠\加上一或多个字符构成。
如\n,\t,\\,\?等。其详细含义此处不再赘述。那么‘\n’究竟代表什么呐?我准备在实践中检验一下
于是我进行了如下代码(并且把’\?’换为其他‘诸如此类单引号下是转义序列的字符常量)发现它竟然就是’?’对应的ASCII码值。其它的经检验也都相同。但是如果只是随意的如’\r'(引号内并非转义序列则不会得到与’r’相同的结果)。
#include<stdio.h>
#include<Windows.h>
int main(void)
{
char i;
i = ‘\?’;
printf(“%d”, i);
Sleep(10000);
return 0;
}
3. 第三个‘??!’牵扯到三字母词。三字母词就是几个字符的序列,合起来表示另一个字符。
如下
三字母词 | 对应字符 |
??/ | \ |
??! | | |
??) | ] |
??( | [ |
??> | } |
??< | { |
??= | # |
??- | ~ |
所以’??!’与’|’对应的ASCII码值相同
4. 第四个只需要知道在C语言中用”\+数字“如(\40)来表示相应八进制数代表的字符,用“\x+数字”来表示相应十六进制数代表的字符。在《C与指针》中讲转义序列时说
\ddd,其中三个d均是八进制数字,这个转义符表示的字符既是给定八进制数值代表字符。如\40对应十进制32,则其代表ASCII码值为三十二的字符即 空格。注意:’ ‘,引号中间是一个空格也属于字符常量。
\xddd与上类似,只是将八进制转化为十六进制。如\x20对应十进制32,同样表示空格这个字符。 注意:在C语言中,所有字符常量都作为整形量来处理(即字符型数据与整形数据可通用)如 char i; i=’a’-32; printf(“%c”,i);则将输出’A’ 或者printf(“%d”,i);则将输出65
或 int i; i=’a’-32;
printf(“%c”,i);将输出’A’ 或者printf(“%d”,i);则将输出65
附:常用ASCII码值: ‘a’~’z’ 97~122
‘A’~’Z’ 65~90
‘0’~’9′ 48~57
字符串常量 : 由一个双引号括起来若干字符的序列(在这里若干可表示0或1或…)。
如”hello world”,”C language programming”, “a” , “123.45”,均合法。 注意:1.字符串常量不能被赋值,同时字符串常量不能对值修改
2.字符串常量在内存中占若干字节(至少一个字符结束标志)占字节数等于字符串中字节数加一。在C语言中系统会在每个字符串的最后自动加一个’\0′(本身并不看作是字符串的一部分)作为字符串的结束标志。如”hello”在内存中占六个字节。
3.无字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组。用数组中每一个元素存放一个字符。如char a[]=”hello”;
4.属于静态存储类,在整个程序运行中只存储一份。
进一步探讨字符串常量,联系字符串数组与指针
今天的文章C语言字符常量与字符串常量分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/29441.html