4.8.3 指针和字符串
数组和指针的特殊关系可以扩展到C-风格字符串。请看下面的代码:
char flower[10] = “rose”;
cout<< flower << “s are red\n”;
数组名是第一个元素的地址,因此cout语句中的flower是包含字符r的char元素的地址。cout对象认为char的地址是字符串的地址,因此它打印该地址处的字符,然后继续打印后面的字符,直到遇到空字符(\0)为止。总之,如果给cout提供一个字符的地址,则它将从该字符开始法院,知道遇到空字符为止。
这里的关键不在于flower是数组名,而在于flower是一个cher的地址。这意味着可以将指向cher的指针变量作为cout的参数,因为它也是char的地址。当然,该指针指向字符串的开头,稍后将核实这一点。
前面的cout语句中最后一部分的情况如何呢?如果flower是字符串第一个字符的地址,则表达式"s are red\n”是什么呢?为了与cout对字符串输出的处理保持一致,这个用引号括起的字符串也应当是一个地址。在C++中,用引号括起的字符串像数组名一样,也是第一个元素的地址。上述代码不会将整个字符串发送给cout,而只是发送该字符串的地址。这意味着对于数组中的字符串、用引号括起的字符常量以及指针所描述的字符串