一路动态内存分配的小题

一道动态内存分配的小题

#include<iostream>
int main(){
  using namespace std;
  double*p3=new double[3];
  p3[0]=0.2;
  p3[1]=0.5;
  p3[2]=0.8;
  cout<<"p3[1] is " <<p3[1]<<".\n";
  p3=p3+1;
  cout<<"Now p3[0] is "<<p3[0]<<" and ";
  cout<<"p3[1] is "<<p3[1]<<".\n";
  p3=p3-1;
  delete [] p3;
  return 0;

下面是程序的输出:
p3[1] is 0.5
Now p3[0] is 0.5 and p3[1] is 0.8.

请问p3[1]为什么值是0.8了,而不是0.5呢?程序中p3=p3+1只是改变了p3的地址  但p3[1]是怎么变成p3[2]的?
c++

------解决方案--------------------
p3是一个指针指向new的数组的首地址(第一个元素的地址)
p3=p3+1;是指现在p3这个指针指向首地址的下一个地址了(也就是第二个元素了),所以...p3[0]现在就成了第二个元素,p3[1]就是第三个元素了
------解决方案--------------------
p3=p3+1; 后  p3已指向0.5了

p3[1]等价于 *(p3+1) //加1之前就指向0.5了,加1之后指向0.8