关于c++中char*、char ch[]和string区别

一、字符串指针:

char* ch="hello";

这里的"hello"是字符串常量,是不可以改变的,即通过ch[0]="s"会编译出错。如果不同的变量指向的是相同的字符串,则这几个变量的地址是一样的。

ch保存的是“hello"这个字符串常量的首地址。

二、字符串数组:

字符串数组也就是所谓的c风格字符串,因为在c中,字符串是以字符数组的形式保存的。

char ch[]="hello";

字符串数组的特点是以””结尾,因此上述的ch数组长度实际上是6,但是字符串的长度仍为5。

字符串数组内元素是可以改变的。

memset(ch,0,sizeof(ch));

另:

strlen()//求字符串的长度,遇到''停止,因此是不包含''空字符结尾的。

sizeof()//求内存分配的字节数。

因此char ch[]='hello':

strlen(ch)==5;//但是有6个空间被占用了,只有四个没有被用。

sizeof(ch)==10;//因为一个字符只占一个字节,共分配了10个内存区。

https://blog.csdn.net/21aspnet/article/details/1539951

二者之间的转化:

char* str=new char[5];

此时str是这个数组的首元素的地址。

原文地址:https://www.cnblogs.com/zhuluqing/p/8761640.html