#include "iostream"
using namespace std;
int main(void)  
{  
    int a[4][4] = {  
                  {1,2,3,4},  
                  {50,60,70,80},  
                  {900,1000,1100,1200},  
                  {13000,14000,15000,16000} };  
    int (*p1)[4] = a;  
    int (*p2)[4] = &a[0];  
    int *p3 = &a[0][0];
    cout<<*(a+1)<<endl;//0018FF18
    cout<<*(*(a+1))<<endl;//50
    cout<<*(a+1)-1<<endl;//0018FF14
    cout<<*(*(a+1)-1)<<endl;//4
    cout<<*(*(a+1)+1)<<endl;//60
    /*
        二维数组指针地址加减1是地址的位移
    */

    cout<<"地址是否相等"<<(p1 == a)<<endl;
    cout<<"地址是否相等"<<(p1[0] == a[0])<<endl;
    cout<<"地址是否相等"<<(*(p1+1) == *(a+1))<<endl;
    cout<<"值是否相等"<<(*(*(p1+1) + 1) == *(*(a+1)+1))<<endl;
    
    cout<<"地址是否相等"<<(p2 == a)<<endl;
    cout<<"地址是否相等"<<(p2[0] == a[0])<<endl;
    cout<<"地址是否相等"<<(*(p2+1) == *(a+1))<<endl;
    cout<<"值是否相等"<<(*(*(p2+1) + 1) == *(*(a+1)+1))<<endl;

    cout<<sizeof(p1)<<endl;
    printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3));  
      
    return 0;  
} 
int main(void)  
{  
    int a[4][4] = {  
                  {1,2,3,4},  
                  {50,60,70,80},  
                  {900,1000,1100,1200},  
                  {13000,14000,15000,16000} };  
    int (*p1)[4] = a;  
    int (*p2)[4] = &a[0];  
    int *p3 = &a[0][0];  
    printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3));  
      
    return 0;  
}  
int (*p)[4]中的p是一个指针,指向的对象是一个具有4个int类型元素的一维数组;
int *p[4]中的p是一个数组名,这个数组的元素是指向int类型对象的指针。注意这里的p不是指针,数组名与指针是不同的。