指针p ,存储的不应该是指针数组的首地址(即指向 ,指针数组里的指针)
为什么,在输出时,写p就可以输出指针数组里的值?
没有太弄懂指针数组和指向指针的指针(希望,有大佬详细解答一下)
cout的一个重载就是输出char *(char *就是字符串,char是字符)
因此p[i - 1]就满足这个参数的要求。这是char *的特例,对于int * float *等就不行。
对于指针来说,用 int *p=a举例子, 这句代码:std::cout<<"p="<<p<<std::endl,输出的是指针p指向的变量的地址,也就是p指针所保存的内容,也就是数组a的首地址,也就是a[0]的地址。所以从运行结果可以看出来,它们的值都是相同的。对于*p来说,这句代码:std::cout<<"*p="<<*p<<std::endl;输出的是p指向的变量所保存的内容,也就是a[0]的内容。
对于&p,则表示的是指针p自身在内存中的地址。这个地址可被指向指针的指针所指。比如,int pointer=&p;跟上面一样,pointer指向p指针在内存中的地址,也就是pointer保存p指针在内存中的地址。*pointer则保存p指针所保存的内容,即p指针所指向的a[0]的地址。其实可以这么认为,*pointer也是个地址,这个地址其实就是a[0]的地址。pointer则是指向a[0] 中的内容。&pointer则是pointer指针在内存中的地址。
首先说一下一个语法糖: a[1]=*(a+1);
p=&Month[0] ==》 p=&(*(Month+0)) ==》 p=Month;
这样转换过来就一目了然了