int (*p)[4]
因为小括号()的优先级最高,所以先考虑小括号,即p先和 * 结合,所以p的本质是一个指针,再与方括号[ ]结合,即[ ]描述了p的性质——p是一个指针,它指向的是一个数组,这个数组有4个元素,元素是int类型的。即p是指向长度为4的数组的指针。
p也可以理解成p[][4],一个n行4列的二维数组。
那么p的值为二维数组首地址,
p值为二维数组首行首地址(与p相同),
**p才是首元素的值(与p相同)。
*( *(p+m)+n)指二维数组第m行,n列元素的值
int arr[2][5] = {1,2,3,4,5,6,7,8,9,10};
int(*p)[5] = arr;//定义一个指针数组,将指针首地址指向arr
cout << (int)arr << endl;//地址:9698080--第一行首地址
cout << (int)(*(p+1)) << endl;//9698100--第二行首地址
cout << (int)(*(p)+1) << endl;//9698084--第一行第二列地址
cout << *(*(p+1)+1) << endl;//取第二行第二列元素
int *p[4]
因为[ ]的优先级高于 * ,所以先考虑 [ ] ,即p先和 [ ]结合,所以p的本质是一个数组,再与 * 结合,即 * 描述了p的性质——p是一个数组,数组里装的元素是4个指针,指针是int型的。
int (*p)[5],
所以,你的(*array), array, a值相同。均是首地址。