C++指针用法:(*p+n)和(*(p+n))有什么区别?

typedefstructT{floata,b,c;}T;foo(T**p){*p=newT[6];for(intn=0;n<6;n++){(*p+n)->a=1;(*p... typedef struct T{
float a,b,c;
}T;
foo(T** p)
{
*p=new T[6];
for(int n=0;n<6;n++)
{
(*p+n)->a=1;
(*p+n)->b=2;
(*p+n)->c=3;
}
}
问题:在这里(*p+n)和(*(p+n))有什么区别,请详细解释一下,谢谢!
展开
 我来答
l521088816
2013-01-23 · TA获得超过1771个赞
知道小有建树答主
回答量:780
采纳率:0%
帮助的人:1136万
展开全部
(*p+n)就是*p所指的变量加上n
而(*(p+n))则是指当前元素后面第n个元素的值:4
如有一个a[9]数组,*p=&a[2],则(*(p+3))就是a[5]了
而(*p+n)就是a[2]+n的意思
不过*p++不能这么看,*p++会看成*(p++)
因为++和*运算等级一样,且同是右结合运算符,所以从右开始运算
cdyzxy
2013-01-23 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:4585万
展开全部
foo函数中先开设了6个结构分别是可以由*p,*p+1,*p+2,*p+3,*p+4,*p+5来访问,请注意p的定义是**。
循环中用(*p+n)相当于(*p)[n],可以依次访问6个结构,给它们赋值。
由于*p指向的是结构数组,而*(p+n)除了n=0的情况外就不知道指向哪里了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
剑圣灬逍遥
2013-01-23 · TA获得超过1935个赞
知道小有建树答主
回答量:151
采纳率:100%
帮助的人:195万
展开全部
这里面涉及到的三个运算符,优先级为() > * > +
(*p+n)
先计算*p再和n求和,即指针p指向的内容和n求和,这里面*p指向的是T[6]这个数组的首地址,即第0个元素的地址
*(p+n)
先计算p+n,再取这个指针指向的内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式