int (*p)[3]表示p是个指向维度为3的二级指针相当于一个n行3列数组a[n][3],每一行的首地址;
int *p表示一个指向整形的指针;
int**p表示一个二级指针;
其中int (*p1)[3]与int**p2都是二级指针,对于二维数组来说我觉他们最大区别就是p1只能指向列数为3的二维数组的首地址;而p2可以指向任意二维数组首地址;同时要注意他们两者之间+ 、++ 等运算符的规律也不一样
int (*p)[3],p是一个数组指针
int *p; p是一个指针变量
int **p; p是一个二级指针
int *p是指针,指向一个int类型;int **p是指针的指针指向int *类型(理解方便,可以理解为int *类型);int (*p)[3] 是指针的指针(二维数组指针),指向一个数组,而数组内容指向一个一维含3个元素的数组,简单讲即*p指向int[3]类型,当然*(p+1)....*(p+n)都指向一个一维含3个元素的数组,p本身指向一个数组。
new int[5][5]编译是通不过的,二维动态数组不是这样分配的,需要先申请int *类型数组,数组的元素再赋值为int [5]类型的数据即
int **p=new int*[5];
for(int i=0;i<5;++i)
p[i] = new int[5];