int *p[3] 与 int (*P)[3]的区别?

请问int *p[3] 与 int (*P)[3]有什么区别?能举例说明一下吗?谢谢!
2024年11月29日 20:58
有5个网友回答
网友(1):

这两个其实是数字指针和指针数组的区别。我们一个一个来说明:

(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");}

参考资料:数组指针_百度百科

网友(2):

int *p[3] 是一个数组,有3个成员,其成员是指向整型的指针。
int (*P)[3]是一个指针,它指向一个有3个整型的数组。

可以用sizeof来测试两个的大小。

网友(3):

int *p[3]应该是指针数组,是长度为3,类型为整型的数组,数组中的元素是指针;而int (*p)[3]这是数组指针,表明了p是一个指针,它指向长度为3的整型数组的首地址,大概就这个意思吧

网友(4):

前一个是一维指针的数组,就是数组里边的每个元素都是一个指针
后一个是一个指针,他指向的是一个包含三个元素的数组。
具体看参考资料

网友(5):

http://zhidao.baidu.com/question/233863061.html&push=ql