C++学习[2]--字符串和字符串数组的思考

来源:互联网 发布:电脑桌面提醒软件 编辑:程序博客网 时间:2024/06/08 00:49

1 字符串和字符串数组的区别

  字符串char *s="awdwdawd"是按照常量的,期间的值不允许进行修改,

 字符串数组,则是可以修改的,为什么?因为字符串数组在赋值的时候,比如char s[]="wadawdwd";是先生成一个wadaad的常量字符串,然后再分别将这个字符串常量的各个值拷贝到字符串数组的内存区域,数组的内存区域的值才可以修改的,因此生成的字符串数组的内容,其实是一个拷贝。


2 字符串的显示和内容。

字符串的声明主要有两种,一种是字符串常量,一种是字符串数组。

比如

char *s="deda"

char  *s=new char[100]  这个虽然类似于动态分配int数组的方式,但是我自己试了试,动态分配int数组,初始化后,还可以针对特殊值进行修改过的,但是如果是动态分配这个字符串,初始化后,只具有只读的属性,无法对特定字符串进行修改。int和char动态分配这种区别的深层的原因我也不太清楚。

所以我觉得上面的其实不叫动态分配数组了,只能叫动态分配字符串。


字符串数组

char s[10]="dawdawd"

或者char s[]="dawdawd" 这样的是字符串数组,而且初始化后,对他的某个值进行改进,里面的具体值可以修改的。


3  剩余的东西。

比如我要新建一个字符串数组 char s[80]="welcome";

如果我们用cout去显示,那么这个80个元素大小的char型数组会显示welcome,它的紧接下来的元素就是"\0",那么更后面那些没有赋初值的变量呢?  乱码。。。我原以为会自动赋值为0。。但是我想多了,因此这种时候要尽量避免在运算时将这后面的乱码元素考虑进去。

cout之所以能够显示正确的welecom,我估计是里面已经内置了检测结束符"\0"的机制,因此他只截取有用信息,剩余的他就不考虑了。


4 数组是数组,他的大小一旦规定了,就不可更改了,我们只能改内容,但是不能更改数量属性。



原创粉丝点击