如何使用指针算法访问结构数组?
假设我有一个结构
struct point{
int x;
int y;
}collection[100];
假设我有一个功能
int func(struct point *collection,int size)
在此函数内部,我访问元素,如下所示。
collection[0].x
这与*(collection + 0).x
相同吗?由于.
运算符的优先级高于*
运算符,因此首先将集合指针递增0,并应用点运算符,然后取消引用指针?不知怎的,这没有意义;任何澄清都表示赞赏。
答案 0 :(得分:2)
这与
*(collection + 0).x
相同吗?
没有。您的解释绝对正确,.
的优先级高于*
,因此第二个表达式被解析为*((collection + 0).x)
。另一方面,collection[i].x
相当于(*(collection + i)).x
。
实际上这种尴尬是引入->
运算符的原因,所以假设y
是一些非平凡的表达式,你可以写
y->x
而不是
(*(y)).x
虽然在这个特定情况下collection[0].x
显然比(collection + 0)->x
更清晰。