指向char数组的指针索引

时间:2014-10-31 12:31:36

标签: c++ arrays pointers

我试图找出,为什么以下程序的输出是“WAHNAHNN”。

我的问题是: 为什么索引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;
}

1 个答案:

答案 0 :(得分:4)

p + i的类型为char*

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