#include <iostream>using namespace std;int main(){int s1[3];int (*p1)[3] = s1; // error, s1为列指针,p1为数组指针,这里理解为行指针int (*p2)[3] = &s1; // ok, 列指针取地址即为行指针int *p3 = s1; // okint s2[3][4];int (*p4)[3][4] = s2; // error, s2理解为为行指针,即int (*)[4],指向一个一维数组, p4指向的是一个二维数组int (*p5)[3][4] = &s2;// ok, 取数组的地址赋给数组的指针int (*p6)[4] = s2; // ok, 见14行int (*p7)[4] = s2[0]; // error, s2[0]有两个含义,1,一个一维数组的数组名,2.一个列指针,即int*, 指向数组的第一行第一列int *p8 = s2[0]; // ok, p9指向第一行的第一个元素int *p9 = s2[0] + 1; // ok, p9指向第一行的第二个元素cout << sizeof(s1) << endl; // 12, 数组名cout << sizeof(s1[0]) << endl; // 4, intcout << sizeof(s2[0]) << endl; // 16, 数组名 (也有列指针的含义)cout << sizeof(s2[0] + 1) << endl; // 4, 列指针cout << sizeof(s2) << endl; // 48, 数组名return 0;} 见 http://jiangyiblog.net/archives/148