用#define命令定义的符号常量与用const定义的常变量的区别:
符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,它没有类型,在内存中并不存在一符号常量命名的存储单元。而常变量具有变量的特征,它具有类型,同时在内存中存在着以它命名的存储空间,可以用sizeof测出其长度。与一般变量不同的是它的值是不能改变的。并且用const定义的常变量必须在定义的时候就对其进行初始化。
对于字符串常量“abc”来说,在内存中是占了四个字节,因为它第四个字节是存放了“\0”作为一个字符串结束的标志,但是“\0” 并不是字符串的一部分,只作为字符串结束的标志。
对于字符串常量“abc\n”来说,是4个字符,在内存中占了5个字节,其中“\n”是一个转义字符。编译系统在遇到“\”的时候就会把它默认为是转义字符的标志,把它和后面的字符一起作为一个转义字符。如果希望将“\”字符也作为字符串的一个字符,则应该写成“abc\\n”,此时字符包括5个,即为:a,b,c,\,n。如果有以下输出语句:
cout<<"abc\\\n"<<endl; 会输出:abc\,然后换行;
同理如果输出:cout<<"I say \"Thank you!\"\n"<<endl; 会输出:I say "Thank you!";