笔试面试6字符串常量
有时候会碰到这么一道题。
#include
#include
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
——————————————————————————————————————————————————————————————————
- 本文作者: royalchen
- 本文链接: http://www.royalchen.com/2016/02/24/笔试面试6字符串常量/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!