我试图找出,为什么以下程序的输出是“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;
}
答案 0 :(得分:4)
p + i
的类型为char*
。
operator <<
将此解释为null终止字符串。这意味着程序将在第一次迭代时输出“WHAN”(i == 0
所以p + i == p
,与a
相同),第二次迭代时输出“A”,“HN”第三个和最后一个“N”。