由字符指针定义的字符串不可修改问题

本文探讨了C++中使用指针和数组引用字符串的区别,重点分析了指针指向字符串常量时不可修改的原因,并给出了正确的修改字符串的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

老生常谈的问题,就当复习了....

问题引入:

#include <iostream>
using namespace std;

int main()
{
	char *str1 = "abcd";
	cout << str1 << endl;
	str1[0] = 'e';
	cout << str1 << endl;
	
	return 0;
}
注:编译没有问题,运行时出现问题。

在C++中,如果用指针来援引字符串,比如: char *p="abcd"; 此时该字符串为常量,不可以用指针p进行修改,比如:p[0]='e'; 因为不可以修改常量值;如此定义字符数组道理是一样的,无非是多了几个常量指针,如:p[0]、p[1]、p[2]等,这些指针指向的字符串都是常量,不可以随意更改。如果你想可以修改的话,就需要定义成数组形式如: char p[]="abcd"; 此时的 p[0]='e'; 则是正确的。

至于*pt="abcde"; 是可以的,这里你首先要明白这几点:这里的*pt是一个指针,它里面存放地址,等价于pt[0]或者*(pt+0)  ;另外,每一个字符串都是一个地址,这句话只是让*pt指针改变了指向,现在它指向了新的字符串"abcde"; 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值