字符指针修改字符、字符数组修改字符、String类修改字符
1, 字符指针有初始值时,不能修改其中字符的值
1 |
|
会报错:
原因
因为char *
字符指针,指向的数据存储在静态存储区,里面的值不允许修改。相当于const char *
表示指针指向内存区域不能修改。也就是上面的字符串nihao不能修改。
2,字符指针赋值给另外一个字符指针,接受字符串的指针也只能进行读取操作。
1 |
|
同样报错:访问权限的问题
原因
这里原因跟上面一样,只不过将char *
赋值给另一个char *
,本质上还是尝试修改一个const char *
.也不允许修改。
3,如果想要对字符指针里面的值进行操作怎么办呢?(最简单的方法直接看4.)
- 申请动态内存(在堆中,属于动态存储区,允许修改)malloc(c)或者new(C++)
- 将静态数据区数据复制到动态内存中进行修改
看例子:
1)用C语言中strcpy
函数
1 |
|
原因
为什么这里字符指针可以修改?因为char * =new
在堆中new(malloc和new一样的效果)了一块内存,该内存是动态存储区,允许修改值。
2)可以用C++中string 类解决
1 |
|
4,直接用char []定义字符变量,允许修改某个字符
代码
1 | char a[10] = "nimao"; |
原因
因为定义了一个字符数组char a[10]
。字符数组放在栈内存中,属于动态内存区,允许修改。
补充:
需要了解的c语言几个存储区
动态存储区
包括堆存储区、栈存储区。
- 你需要知道的是:堆一般是留给程序员用的,比如我们new一个数组,malloc数组,都是存放在堆中,用完后我们需要自己delete清理内存(虽然系统也会帮忙自动垃圾清理)。
- 定义一个数组,是放在栈储存区。栈一般是系统自己用的,像递归执行每一层执行状态都存储在栈存储区中。
静态存储区
存放常量、静态变量、全局变量
程序区
存放程序语句
参考链接
注意char * 和char []区别
char *不可以修改某个字符,char []可以修改某个字符。
参考链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 坚韧的长线「串联」散落的珍珠!
评论