1. 概念
程序不仅仅用于数字计算,现代企业级项目中更多流转着充满了烟火气的人间话语
。这些话语
,在计算机语言称为字符串
。
从字面上理解字符串
,类似于用一根竹签串起了很多字符
,让人很容易想起冰糖葫芦
。
字符串的基本组成元素是字符,可以认为字符串就是字符类型的数组。
量变总会引起质变,字符串
是由字符
的量变演化出的新类型
, 2
者在数据含义
和存储结构
都有着本质上区别。
1.1 数据含义
C
把字符类型
当成整型数据类型
看待。如下代码,当把A
赋值给myChar
时, 编译器先获取A
的底层 ASCII
编码,然后再把编码值赋值给myChar
。
int myChar='A';
cout<<myChar;
//输出:65
如下代码,编译器先找到97
对应的字符,然后再赋值给myChar
,字符类型
和整型类型
语法层面有差异,在底层,C
一视同仁。
char myChar=97;
cout<<myChar;
//输出:a
所以,用于整型数据类型的运算符都可以用于char
类型。
char myChar='B';
char myChar_='A';
int res=myChar myChar_;
cout<<"加操作:"<<res<<endl;
res=myChar-myChar_;
cout<<"减操作:"<<res<<endl;
res=myChar*myChar_;
cout<<"乘操作:"<<res<<endl;
res=myChar/myChar_;
cout<<"除操作:"<<res<<endl;
bool is=myChar>myChar_;
cout<<"关系操作:"<<is<<endl;
输出结果:
代码语言:javascript复制加操作:131
减操作:1
乘操作:4290
除操作:1
关系操作:1
虽然,字符串可看成是字符组成的数组,但是,应该把字符串当成一个独立的整体,其数据含义更贴近现实意义:
- 因
字符
是单一词,所能表达的语义非常有限。 字符串
则是由许多字符组成的语句,可用来表达丰富的语义。如:可以是姓名、可以是问候、可以情感表达、可以是提示……根据使用的上下文环境,字符串有其自己特定的现实意义。
1.2 存储结构
字符
常量必须用单引号
包起来,字符
直接存储在变量中。
char myChar='A';
字符串
的存储方案比字符
复杂很多,C
支持两种字符串
的存储方案:
C
语言风格的存储。C
语言的对象存储。
下面深入了解这 2
种存储方案的区别。
2. C 风格的字符串
C
可以直接延用C
语言中的2
种字符串存储方案:
2.1 数组
数组
存储能较好地诠释
字符串是由字符所组成的概念。
使用数组存储时,并不能简单如下代码所示。对于开发者而言,可能想表达的是输出一句HTLLO
问候语。但在实际执行时,输出时可能不仅只是HELLO
。
char myStr[5]= {'H','E','L','L','O'};
cout<<myStr<<endl;
为什么会输出更多信息?
因为cout
底层逻辑在输出字符数组时,会以一个特定标识符