我正在学习学习C ++的基础知识,但在尝试解读关于字符和指针的以下内容时,一直在敲打墙。包括行注释,使我目前了解正在发生的事情。鉴于我有如下代码:
using namespace std;
int main()
{
//String literal is an array of chars
//Array address gets assigned to a ptr of char
char myletters[] = {'h','i'};
char* lp = myletters;
cout << *lp << endl;
//Logically equivalent to above statements
char* letters2 = "hi";
cout << *letters2 << endl;
//String literal turns into array of chars
//Array of chars gets assigned to a ptr of chars
//Each ptr of chars gets stored into letters array
char* letters[] = {"hi","hello"};
cout << *letters << endl;
}
我的输出将是:
h
h
hi
我的问题是:当我使用最后的cout来打印*字母的内容时,为什么我会得到字符串&#34; hi&#34;而不是&#34; hi&#34;或者&#34;中的第一个字符的地址&#34;?我知道cout的第一次使用是打印一个char,而最后一个cout正在打印一个char *,但是我仍然想知道为什么它打印完整的字符串而不是地址,就像我通常期望的指针一样
非常感谢。
答案 0 :(得分:0)
<<
运算符有char*
的特殊定义,用于打印它所引用的C字符串。
在您的情况下,*letters
有char*
类型(字母为char*[]
,与char**
相同)而不是char
为*lp
有