一个令人纠结的有关问题。二维数值:a+1 == *(a+1)

一个令人纠结的问题。。二维数值:a+1 == *(a+1)?
C/C++ code

#include<iostream>
using namespace std;
int main(){
    int a[3][4]={{1,2,3,4},{55555,6,7,8},{9,10,11,12}};
    cout<<a+1<<endl;//跟下面一句一样得结果,为什么????
    cout<<*(a+1)<<endl;
    cout<<&a[1][0]<<endl;//a[1][0]的地址与*(a+1)和a+1的值一样


    cout<<*(*(a+1))<<endl;
    cout<<a[1][0]<<endl;

    cout<<*(*a+4)<<endl;//*a为a[0][0]的地址, a[0][0]地址加4位即为a[1][0]的地址
    cout<<(*a)[4]<<endl;//(*a)[4] = a[1][0]
}




------解决方案--------------------
2维数组,*(a+1)也是地址
------解决方案--------------------
LZ去看一下《C指针和缺陷》
会有收获的~
------解决方案--------------------
因为他们所指向的地址一样
------解决方案--------------------
C/C++ code

int a[3][4]={{1,2,3,4}, {55555,6,7,8}, {9,10,11,12}};
cout << a + 1 << endl;                // 表示第二行的数组指针(类型:数组的指针)
cout << *(a + 1) << endl;            // 表示第二行数组首地址(类型:int 数组),
                                    // 虽然类型不一样,但其值与上式一样
cout << &a[1][0] << endl;            // 表示第二行首元素的地址(类型:int 指针),
                                    // 虽然类型不一样,但其值与上两式都一样


cout << *(*(a + 1)) << endl;        // 55555,第二行数组起始地址(*(a + 1))下的元素
cout << a[1][0] << endl;            // 55555,第二行数组第一个元素

cout << *(*(a + 1) + 2) << endl;    // 7,第二行数组起始地址(*(a + 1))前移 2 后取其元素
cout << a[1][2] << endl;            // 7,第二行数组第三个元素

cout << *(*a + 4) << endl;            // 55555,表示第一行数组起始地址(*a)偏移 4 后再取其元素
cout << (*a)[4] << endl;            // 55555,表示对第一行数组(*a)取下标为 4 的元素

------解决方案--------------------
http://topic.****.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?75724

周经帖。。。
------解决方案--------------------
a+1与*(a+1)的指向的地址值相同,但是指针的类型不同。。前者是指向*(a+1)这个指针的指针,后者是指向a[1][0]这个数的指针。