一、字符串指针:
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是这个数组的首元素的地址。