c字符串常量

总结:

1.字符串常量是不可改变的,放在文字常量区,也就是在静态存储区上。

2.除了char buffer[20]= "hello ";和strcpy(p, "hello ");这两个情况外,程序中出现的字符串都应该被视为字符串常量了. 

 如const char *p= "hello ";

 

网上看了几篇文字,基本搞懂:

简单地说,除了存在栈和堆上的字符串才不是字符串常量.其余的都是字符串常量. 
举一个例子:char buffer[20]= "hello ";这个字符串是用来初始化字符数组buffer的,存在栈上,不是一个字符串常量,可以用下标读写其值.又比如,char *p=malloc(...); 
strcpy(p, "hello ");这个 "hello "也不是一个字符串常量,因为是在堆上,也可以用指针p进行读写.至于在这两者的前面加上const修饰,虽然表明 "hello "是不允许更改的,但是对于字符串来说,不能说明是字符串常量.因为,const要修饰的不是明确说hello是不可写的,而是说p指向的这段内存区域是不可写的.修饰的对象是不同的,只是恰巧这段区域里存的是hello这个字符串(说得有点绕了吧,你再坚持一下). 
除了这两个情况以外,程序中出现的字符串都应该被视为字符串常量了. 
比如const char *p= "hello ";这个字符串是存放在静态存储区上的,是不可以更改的.它的有效范围是整个程序的生命期.如果有另外的语句p= "nb ";那么,hello这个字符串将会永远不被引用,但是它会存在于整个程序的生命期.这才是真正的字符串常量.



char str1[] = "abc";
char str2[]= "abc";
cout<<boolalpha<<(str1==str2)<<endl;
 


const char str3[] = "abc";
const char str4[] = "abc";
cout<<boolalpha<<(str3==str4)<<endl;


const char* str5 = "abc";
const char* str6 = "abc";
cout<<boolalpha<<(str5==str6)<<endl;


分别输出 false  false true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值