笔试面试6 字符串常量

有时候会碰到这么一道题。

#include <iostream>
#include <string>
using namespace std;
int main()
{
 	char str1[]="abc";//声明以及初始化字符串数组会分配内存 
 	char str2[]="abc";
 	cout<<"str1==str2  "<<(str1==str2)<<endl;
	
	char *str3="abc";//使用指针则指向一个字符串常量,存在于只读内存中,无法更改 
	char *str4="abc";//例如  str3[0]='A'会出错!
	//str3[0]='A'; 
 	cout<<"str3==str4  "<<(str3==str4)<<endl;

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

	const char str7[]="abc";
	const char str8[]="abc";
 	cout<<"str7==str8  "<<(str7==str8)<<endl;

	char const str9[]="abc";
   	char const str10[]="abc";
 	cout<<"str9==str10  "<<(str9==str10)<<endl;	
 
	 cin.get();	 
	 
	 
} 
测试结果:


要想知道为什么会有这个结果,首先要了解一个名词。

字符串常量

来自百度百科的解释:

字符串常量是一对双引号括起来的字符序列。
例如下面的是合法的字符串常量:
"how do you do.","CHINA","a","$123.45"
存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空字符‘ \0’自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占(n+1)个 字节
可以输出字符串,例如:
printf("how do you do.");
在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。例如“char a[10]="love".”

在程序中,字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。因此,你可以把字符串常量赋值给一个“指向字符 的指针”,例如:char *a = "123" ; a = "abc";,后者指向这些字符所存储的地址。


——————————————————————————————————————————————————————————————————

//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155

author:天下无双

Email:coderguang@gmail.com

2014-11-5

于GDUT

——————————————————————————————————————————————————————————————————






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值