char*/char[]
char*是字符指针类型。比如:char * pchar;则pchar就是一个指针,是一个指向字符地址的指针。对于char[]而言,可以把数组名当作char*类型来处理,所以我们把两者放在一起讨论。字符类型的指针与其它基本类型的指针之间有一个非常重要的区别,看下面这个程序:
int age[]={11,2,33};
char name[]="ZhangJian\0Ping";//用双引号引起的字符串给字符数组赋值时,系统会自动在最后加一个'\0',可以显式提供。
int *pAge =age;//数组名是指向第一个数组元素的指针
char *pName=name;//同上
cout<<"输出pAge指针的值:"<<pAge<<endl; //pAge输出为0012FF60,为内存地址,即系统存储age数组第一个元素的地址,每次运行时都可能得到不同的值
cout<<"输出pName指针的值:"<<pName<<endl;//pName永远输出为"ZhangJian"
即若输出char类型的指针,实际输出的是从该地址开始,把连续的每个字节解释为字符输出,直至遇到'\0'为止,而不是根据数组的长度来确定的。这是C语言遗留的问题之一,因为在C++没有出现之前,C语言表示字符串就是用char数组(或char*)表示的,而要用char数组表示字符串,数组最后一个字符必须是'\0',这是字符数组合字符串之间地区别。这样的设计是为了方便操纵C风格的字符串。
----------------------------------------------------------------------------------
cstring
cstring不是一种类型,而是声明C++中处理C风格字符串的函数的头文件。看下面的一段代码:
char nameA[]="Zhang";
char nameB[]="Zhang";
cout<<(nameA==nameB);//输出0
所以不能想当然的使用基本操作符来操作C风格的字符串,其他操作还包括字符串的连接、比较、计算长度等。C语言(衍生到C++)提供了一系列处理字符串的函数,要使用它们,在C语言中必须包含<string.h>,而在C++中该头文件为<cstring>
-------------------------------------------------------------------------------------
string
string类型是C++相对于C语言所特有的。string不是基本类型,而是一个类,提供了一系列用于操作字符串的函数,例如计算字符串长度、使用(==)比较字符串等等。string类型更适合我们的使用习惯,所以强烈建议在使用字符串的时候使用string类型
-------------------------------------------------------------------------------------
C风格字符串向string类型转换
可以直接将C风格字符串赋值给string类型,例如以下代码:
char * name = "ZhangJianPing";
string names(name);
string类型向C风格字符串转换
使用string类型提供的一个函数c_str(),该函数返回一个const char *类型的值。代码如下:
string name("ZhangJianPing");
const char* cname = name.c_str();