C++ 指向字符数组的指针的索引

C++ 指向字符数组的指针的索引,c++,arrays,pointers,C++,Arrays,Pointers,我试图找出,为什么以下程序的输出是“WAHNAHNN” 我的问题是: 为什么索引i高于p[4](即超过数组的长度)以及为什么它在“WAHN”之后产生另一个“AHNN” 我仍然对p+I(应该是一个位置)和*(p+I)之间的区别感到困惑,p+I应该是一个值。为什么在这两种情况下,输出都是一个值 #include <iostream> using namespace std; int main() { char a[] = "WAHN"; char *p = a

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

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

我仍然对p+I(应该是一个位置)和*(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;
}
#包括
使用名称空间std;
int main()
{
字符a[]=“WAHN”;
char*p=a;
对于(int i=0;p[i];i=i+1)
交换机(i%2){

案例0:coutp+i的类型是
char*


运算符的
p+i
类型为
char*


运算符原因是
运算符很难理解您的混淆。i=0打印字符串“WAHN”,i=1打印字符“A”,i=2打印字符串“HN”,i=3打印字符“N”请不要添加C标签到包含C++代码的问题中。原因是操作符很难理解你的困惑是什么。i = 0打印字符串“WHHN”,i = 1打印字符“A”,i = 2打印字符串“HN”,i=3打印字符“n”。这就是你的代码。@ MpRimeNE请不要向包含C++代码的问题添加C标记。