笔试面试6字符串常量


笔试面试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

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





发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注