字符串常量,C语言字符串常量详解
发布时间:2020-12-15 17:34:12 所属栏目:百科 来源:网络整理
导读:前面讲过,字符常量是由一对单撇号括起来的单个字符,如 'a'、'D'、'?'、'$'。在 C 语言中,除了字符常量外还有字符串常量,顾名思义就是多个“字符”串在一起。与字符常量有所不同,字符串常量是用“双撇号”括起来的多个字符的序列,如"How are you"、"I l
前面讲过,字符常量是由一对单撇号括起来的单个字符,如 'a'、'D'、'?'、'$'。在 C 语言中,除了字符常量外还有字符串常量,顾名思义就是多个“字符”串在一起。与字符常量有所不同,字符串常量是用“双撇号”括起来的多个字符的序列,如"How are you"、"I love you"、"你好"。当然,只要是“双撇号”括起来的,就算只有一个字符也叫字符串,如"a"。字符常量 'a'与字符串常量"a"是不同的。 一个字符在内存中只占一字节,而字符串本质上是多个字符组成的字符数组。C语言规定,在每一个字符串常量的结尾,系统都会自动加一个字符' '作为该字符串的“结束标志符”,系统据此判断字符串是否结束。这里要特别强调一点:' '是系统自动加上的,不是人为添加的。 ' ' 是 ASCII 码为 0 的字符,它不会引起任何控制动作,也不是一个可以显示的字符。比如字符串常量"CHINA",表面上看它只有 5 个字符,但实际上它在内存中占 6 字节,'C'、'H'、'I'、'N'、'A'、' ' 各占一字节。如果要输出该字符串,' ' 不会输出。也就是说,虽然实际上总共有 6 个字符,' ' 也包括在其中,但输出时 ' ' 不会输出。系统从第一个字符 'C' 开始逐个输出字符,直到遇到 ' ',则表示该字符串结束,停止输出。 也就是说,在字符串常量中,如果“双撇号”中能看见的字符有 n 个,那么该字符串在内存中所占的内存空间为 n+1 字节。 下面写一个程序验证一下: # include <stdio.h> int main(void) { printf("%dx20",sizeof("")); printf("%dx20",sizeof("a")); printf("%dx20",sizeof("CHINA")); printf("%dx20",sizeof("How are you")); printf("%dx20",sizeof("I love you")); printf("%dn",sizeof("你好")); return 0; }输出结果是: 1 2 6 12 11 5 第一个“双撇号”中什么都不写,则只有 ' ' 一个字符,所以只占一字节。 第二个"a"中有 1 个可见字符,占 2 字节。 第三个"CHINA"有 5 个可见字符,占 6 字节。 第四个"How are you"中,空格也是字符,也算是可见的,所以总共有 11 个可见字符,共占 12 字节。 第五个"I love you"共 10 个可见字符,占 11 字节。 第六个"你好"为什么占 5 字节?有 2 个可见字符不是应该占3字节吗?C 语言规定,1 个英文字符占 1 字节,而 1个 中文字符占 2 字节,就算是中文的标点符号也是占 2 字节。所以两个汉字占 4 字节,加上 ' ' 总共是 5 字节。 不能将一个字符串常量赋给一个字符变量为什么不能将一个字符串常量赋给一个字符变量?可以从两个方面作出解释:
需要注意的是,虽然 C 语言里面没有数据类型可以存储字符串,但 C++ 和 Java 中都有。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |