笔试面试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"
可以输出字符串,例如:
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
——————————————————————————————————————————————————————————————————