1. C-风格字符串c++
说到字符串,那就不得先说说C-风格的字符串,它的头文件名是cstring。在C中存储字符串是经过char数组来实现的。下面看一段代码:数组
#include <cstring> char c1[5] = {'Z','Z','e','r','o'}; //这不是字符串 char c2[5] = {'Z','e','r','o','\0'}; //是字符串
用cout打印一下c1,发现出现未知错误,打印出来的结果异常,而打印c2就是一个字符串。空字符对C-风格字符串来讲相当重要,空字符是C-风格字符串的结尾,当cout碰到空字符就会中止。而在打印c1过程当中,cout并无在数组中发现空字符,它会一直读下去,直到在其余内存空间碰到空字符,才结束,因此在打印完c1数组内容后面会出现一些莫名的字符。spa
好了,又有问题来了,请看下面代码:code
int a[2] = {1,2}; cout<< a <<endl; //打印了a的地址 char b[2] = {'Z'}; cout<< b <<endl; //打印了Z
为何会出现这种状况呢, 这里牵扯到C++重载机制,对于char数组,cout输出数组内容,而对于其余类型数组,好比int数组,则输出首元素的地址。固然你要获取char数组地址,使用&b就能够实现。强调char数组名是指向首字符的地址的,这一点是不会变的,只不过cout处理char数组时,是输出地址里面的内容的。对象
使用C-风格字符串,每次初始化时要用这么多单引号,太麻烦了,因此有另外一种方式初始化。请看下面代码:内存
char ch1[6] = "ZZero"; char ch2[] = "Everything starts from zero !"; //我的喜欢使用这种,不用去管大小,可是不提倡这种。
2. C++字符串字符串
c++字符串它的头文件是string,string类位于名称空间std中,所以要使用string对象就要用到using编译指令,或者使用std::string来引用它。string
#include <string> using namespace std; //string 初始化 string str1 = {"Zzero"}; string str2 {"ZZero"}; string str3 = "ZZero";