指针和c-风格字符串
指针和数组的特殊关系可以扩展到c-风格字符串。请看下面的代码
char flower[10] = "rose";
cout << flower << "s are red\n";
数组名是第一个元素的地址,因此cout语句中的flower是字符‘r’的地址。cout对象认为char的地址是字符串的地址,因此他打印带地址处的的字符,然后继续打印后面的字符,直到遇到‘\0’为止。总之,如果提供一个字符的地址给cout,它将从该字符开始打印,直到"\0"为止。
关键不在于flower是数组名,而在于他是一个char的地址。这意味这可以将指向char的指针变量作为cout的参数,因为他也是char的地址。
那么后边的"s are red\n"情况是怎样的呢?在c++中引号括起来的字符串像数组名一样,也是第一个元素的地址。上述代码不会将整个字符串发送给cout,而是只发送该字符串的地址。这意味这数组中的字符串、常量的字符串和指针描述的字符串,处理方式是一致的,都将传递他们的地址。于逐个传送字符相比,这样工作量更少。
如果想要打印Char字符串的地址,可以尝试下面的代码
cout<<(int *)flower;
NOTE:早cout和多数c++表达式中,char数组名、char指针以及引号括起来的字符常量都被解释为首字符的地址。