cout
有一个operator<<
用于打印整个字符串的重载char*
(也就是说,打印每个字符直到遇到 a 0
)。相比之下,'s的char
重载只打印一个字符。这就是本质上的区别。如果您需要更多解释,请继续阅读。cout
operator<<
当您在递增指针后取消引用指针时,您发送cout
的是char
, not and char*
,因此它会打印一个字符。
所以cout << *pszString++;
就像做
cout << *pszString;
pszString = pszString + 1;
当您不取消引用指针时,您将发送它char*
以cout
打印整个字符串,并且您在循环的每次迭代中将字符串的开头向上移动一个字符。
所以cout << pszString++;
就像做
cout << pszString;
pszString = pszString + 1;
带有小循环展开的插图:
为了cout << *pszString++;
Randy\0
^ pszString points here
// this means increment pszString and send cout the character at which pszString *used* to be pointing
cout << *pszString++;
// so cout prints R and pszString now points
Randy\0
^ here
// this means increment pszString and send cout the character at which pszString *used* to be pointing
cout << *pszString++;
// so cout prints a and pszString now points
Randy\0
^ here
// and so on
为了cout << pszString++;
Randy\0
^ pszString points here
// this means increment pszString and pass the old pointer to cout's operator<<
cout << pszString++;
// so cout prints Randy, and now pszString points
Randy\0
^ here
cout << pszString++;
// cout prints andy, and now pszString points
Randy\0
^ here
// and so on
我很高兴你以这种方式试验指针,它会让你真正知道发生了什么,不像许多程序员会做任何事情来摆脱必须处理指针的问题。