int main()
{ int a[5]={1,2,3,4,5};int *p1;p1=a; //相当于p1=&a[0],此时p1是数组a的第一个元素的地址cout<<*p1<<endl; //输出a[0]cout<<*(p1+1)<<endl; //输出a[1]int (*p2)[5];p2=&a; //&a表示整个数组的地址,p2是数组指针,指向一个5个int的一维数组,此时p2是数组a的首地址//虽然p2在数值上等于&a[0],但与&a[0]的意义完全不同cout<<*p2<<endl; //虽然加了取值符号,但此时*p2仍然是地址,表示数组a第一个元素的地址cout<<**p2<<endl; //数组a的第一个元素,即a[0]cout<<*p2+1<<endl; //数组a第二个元素的地址cout<<*(*p2+1)<<endl; //数组a的第二个元素,即a[1]cout<<p2+1<<endl; //因为p2是数组指针,所以p2+1会跳过5个元素的地址,因此p2+1表示下一个5个int的一维数组的首地址//为了更好地理解,假设数组a后面紧接着一个数组b={6,7,8,9,10},则p2+1表示数组b的首地址cout<<*(p2+1)<<endl; //数组b的第一个元素的地址,数值上等于&a[4]+1,也相当于&b[0]cout<<**(p2+1)<<endl; //数组b的第一个元素,数组b只是我假想的,实际上该位置的值未定义,所以会输出一个随机值return 0;
}