这两个其实是数字指针和指针数组的区别。我们一个一个来说明:
(1)int*p[3];//定义了一个三维数组,其中的每个元素p[0]、p[1]、p[2]都是指向int变量的指针。
(2)int(*p)[3];//定义了一个指针,这个指针是指向一个三维数组的。
两者之间的区别和联系可以用一个二维数组来阐述:
int *p[3];//定义p[3]为指针数组;int (*q)[3];//定义q为数组指针;int a[4][3];//定义一个二维数组
p[0]=&a[0][0];//可以取a[4][3]中任意元素的地址给p[3]中的元素赋值。q=a[1];//a[1]其实是一个三维数组,其元素包括a[1][0],a[1][1],a[1][2],所以 //a[1]就表示这个数组的首地址,这个地址可以用来给q赋值。
扩展资料:
举例说明如下:
(1)数组指针:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};int (*p)[4];p=(int(*)[4])a;for(int i=0;i<3;i++){for(int j=0;j<4;j++)
{printf("%d",p[i][j]); //或者 *(*(p+i)+j) 或者 *(p[i]+j)}printf("\n");}
(2)指针数组:
int ix=0;int i=0,j=0;int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p[3];for(ix;ix<3;ix++)p[ix]=a[ix];for(i;i<3;i++){for(j=0;j<4;j++)//注意这里的j要赋值等于0,要不然只能输出第一行1234,达不到预期的效果
{printf("%d",p[i][j]); //或者 *(*(p+i)+j) 或者 *(p[i]+j)}printf("\n");}
参考资料:数组指针_百度百科
int *p[3] 是一个数组,有3个成员,其成员是指向整型的指针。
int (*P)[3]是一个指针,它指向一个有3个整型的数组。
可以用sizeof来测试两个的大小。
int *p[3]应该是指针数组,是长度为3,类型为整型的数组,数组中的元素是指针;而int (*p)[3]这是数组指针,表明了p是一个指针,它指向长度为3的整型数组的首地址,大概就这个意思吧
前一个是一维指针的数组,就是数组里边的每个元素都是一个指针
后一个是一个指针,他指向的是一个包含三个元素的数组。
具体看参考资料
http://zhidao.baidu.com/question/233863061.html&push=ql