#include
void main(void)
{
/*
address value
a[0] {1,2,3}
a[1] {4,5,6}
a[2] {7,8,9}
a[3] {10,11,12}
*/
int a[4][3] = {1,2,3,4,5,6,7,8,9,10,11,12};
int *p[4], j; /* p[4] 是指针数据,它们的值都是地址 */
/*
address value
p[0],a[0] {1,2,3}
p[1],a[1] {4,5,6}
p[2],a[2] {7,8,9}
p[3],a[3] {10,11,12}
*/
for(j=0;j<4;j++) p[j]=a[j];
printf("%2d,%2d,%2d,%2d\n",*p[1],(*p)[1],p[3][2],*(p[3]+1));
/*
按以上表格解释
*p[1],[]运算符高于*, 所以p[1]的值是a[1]即{4,5,6}的首地址,*p[1]从其取出值为4
(*p)[1], ()运算符高于[],所以先做*p,它是a[0]即{1,2,3}的地址,(*p)[1]取值为2
p[3][2], p[3][2]对照上表,即12
*(p[3]+1), p[3]的值是a[3]即{10,11,12}的首地址,(p[3]+1)即{11,12}的首地址,*(p[3]+1]取值即为11
*/
}