求教一个指针与数组代码简略的注释

求教一个指针与数组代码简单的注释
本帖最后由 c123sdn123 于 2013-01-01 15:50:14 编辑
初学者,这代码似懂非懂,求教,加上注释,谢谢!
代码如下
#include "stdafx.h"
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
int a[5]={1,3,5,7,9},*p=a,**k;
k=&p;
cout<<*p<<endl;
cout<<**k<<endl;
cout<<a[0]<<endl;

cout<<*(p++)<<endl; 
cout<<**k<<endl;

    cout<<*(++p)<<endl;
    cout<<**k<<endl;
return 0;
}

------解决方案--------------------
#include "stdafx.h"
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
int a[5]={1,3,5,7,9},*p=a,**k;//定义了一个数组a,指针p只想数组首地址,指针的指针k
k=&p;//让k指向p的地址
cout<<*p<<endl;//打印p指向地址的内容,即a[0],即1
cout<<**k<<endl;//打印k指向地址的内容(即p)指向地址的内容,即a[0],即1
cout<<a[0]<<endl;//打印a[0],即1

cout<<*(p++)<<endl;打印p指向地址的内容,即a[0],然后p增加1,指向a[1] 
cout<<**k<<endl;//打印k指向地址的内容(即p)指向地址的内容,即a[1]

    cout<<*(++p)<<endl;//p先增加1,指向a[2],然后打印*p,即a[2]
    cout<<**k<<endl;//打印**k,即*p,即a[2]
return 0;
}