
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))有什么区别,请详细解释一下,谢谢! 展开
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))有什么区别,请详细解释一下,谢谢! 展开
展开全部
(*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++)
因为++和*运算等级一样,且同是右结合运算符,所以从右开始运算
而(*(p+n))则是指当前元素后面第n个元素的值:4
如有一个a[9]数组,*p=&a[2],则(*(p+3))就是a[5]了
而(*p+n)就是a[2]+n的意思
不过*p++不能这么看,*p++会看成*(p++)
因为++和*运算等级一样,且同是右结合运算符,所以从右开始运算
展开全部
foo函数中先开设了6个结构分别是可以由*p,*p+1,*p+2,*p+3,*p+4,*p+5来访问,请注意p的定义是**。
循环中用(*p+n)相当于(*p)[n],可以依次访问6个结构,给它们赋值。
由于*p指向的是结构数组,而*(p+n)除了n=0的情况外就不知道指向哪里了。
循环中用(*p+n)相当于(*p)[n],可以依次访问6个结构,给它们赋值。
由于*p指向的是结构数组,而*(p+n)除了n=0的情况外就不知道指向哪里了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里面涉及到的三个运算符,优先级为() > * > +
(*p+n)
先计算*p再和n求和,即指针p指向的内容和n求和,这里面*p指向的是T[6]这个数组的首地址,即第0个元素的地址
*(p+n)
先计算p+n,再取这个指针指向的内容
(*p+n)
先计算*p再和n求和,即指针p指向的内容和n求和,这里面*p指向的是T[6]这个数组的首地址,即第0个元素的地址
*(p+n)
先计算p+n,再取这个指针指向的内容
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询