int *p[3]和int(*p)[3]的区别

 我来答
阿豪呦1
2018-12-08 · TA获得超过9954个赞
知道答主
回答量:2
采纳率:0%
帮助的人:394
展开全部

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

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

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

shine1991
科技发烧友

2014-05-20 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部

int *p[3]这个叫指针数组,本质上是一个数组,数组元素类型是指向int型的指针


int (*p)[3]这个叫数组指针,本质上是一个指针,指针指向的是一个有3个int型元素的一维数组


对于这种问题最简单的方法是结合运算符优先级/结合性,先确定定义的本质是什么,然后再由内向外一层层理解

例如

int *p[3] ,有运算符优先级/结合性可知,等效于int *(p[3]),那么首先可以确定,p的本质是一个有3个元素的数组,那么数组元素的类型是什么呢,往外看可知,为指针类型,那么指针指向的类型又是什么呢,再往外看,可知为int,所以最后整理下就可以知道p是一个有三个元素的数组,该数组元素类型为指向int的指针

int (*p)[3]同理

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tea酱酱
推荐于2017-09-24 · TA获得超过153个赞
知道小有建树答主
回答量:414
采纳率:100%
帮助的人:277万
展开全部
int *p[3]是一个数组 其中有三个元素 元素是指针
int(*p)[3] 是一个指针 该指针指向一个存有3个整形的数组
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
松甜恬0Je4ba
2014-05-20 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3281万
展开全部
int *p[3] p是一个数组,此数组有3个元素,每个元素都是int*类型,也就是指向整型数据的指针类型。

int a=10,b=20,c=30;
int*p[3]={&a,&b,&c};

而int(*p)[3]中的p是一个指向数组的指针,也就是说它指向的不是一个数,而是一个数组, p是指针,指向[3]个大小的数组···如 int a[2][3]; int (*p)[3]; p=a;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式