2014-10-31 109 views
0

我想知道为什么以下程序的输出是“WAHNAHNN”。指向char数组的指针

我的问题是: 为什么索引i超过p [4](即超过数组的长度),为什么在“WAHN”之后会产生另一个“AHNN”?

我仍然与p + i(应该是位置)和*(p + i)之间的差异混淆,这应该是一个值。为什么在两种情况下输出都是一个值?

#include <iostream> 
using namespace std; 
int main() 
{ 
    char a[] = "WAHN"; 
    char *p = a; 
    for (int i=0; p[i]; i=i+1) 
     switch (i%2) { 
      case 0: cout << p+i; 
      break; 
      case 1: cout << *(p+i); 
      break; 
     } 
    return 0; 
} 
+0

原因是'ostream'上的'operator <<'重载了'char *'[你可以在文档中看到](http://www.cplusplus.com/reference/ostream/ostream/免运营商/) – PeterT 2014-10-31 12:38:51

+0

很难理解你的困惑。 i = 0打印字符串“WAHN”,i = 1打印字符“A”,i = 2打印字符串“HN”,i = 3打印字符“N”,那么它就是你的代码。 – mpromonet 2014-10-31 12:40:04

+1

@mpromonet请不要将C标签添加到包含C++代码的问题。 – Lundin 2014-10-31 15:01:59

回答

4

p + i的类型是char*

operator <<将此解释为空终止的字符串。这意味着程序将输出“WHAN”(i == 0 so p + i == p,与a相同),第一次迭代为“A”,第三次为“HN”,最后一次为“N”。