C++中在创建字符串时的一些问题

本文探讨了C++中字符串初始化的特殊行为,包括字符串数组和指针的不同const属性,以及如何正确地初始化和使用这些变量。

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

C++ 在创建字符串的时候有个很奇怪的特点: 创建并初始化字符串数组和指针的时候,两者的const 属性并不一致,例如:

char ch[] ="abcde";	// ch 为非 const
char* ch2 = "abcde";// ch2 为 const
char *ch="abcde";
的方式,那么ch 指向的内存实际上是临时内存,为const 属性,是禁止写入的。

-----------------------------------------------------------------------------------------------------------------------------------

初始化的问题
char * ch = 'abcde';这样指向字符串文字量的,相当与const ch[5];是不能改变常量数组的内容的,
ch[4] = 'e'//error,给常量赋值,无意义
而char ch[5] = 'abcde';可以当普通数组使用,是可以修改的.ch [4] = 'e';//right,没错
-----------------------------------------------------------------------------------------------------------------------------------
char *ch//表示ch是一个指向字符串的指针,它可以指向字符串常量也可以指向字符串数组即字符数组 。
char ch[]//表示字符数组或字符串,且该数级的内容可以改变。前者可以指向后者,反之不可以
例子:
char *ch="abcd"//这里表示ch指向字符串常量,内容不可改,但ch还可以指向别的字符串。
char ch1[]="abcd"等价于char ch[]={'a','b','c','d','\0'}。注意这里的"abcd"不是常量
虽然ch,ch1同样可以表示指向字数串的指针(这样说不太准确),但ch=ch1可以,而ch1=ch不可以,因为数组名表示常量指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值