结构数组和指针算术

时间:2014-02-04 04:51:12

标签: c arrays pointers structure

如何使用指针算法访问结构数组?

假设我有一个结构

struct point{
int x;
int y;
}collection[100];

假设我有一个功能

int func(struct point *collection,int size)   

在此函数内部,我访问元素,如下所示。

collection[0].x 

这与*(collection + 0).x相同吗?由于.运算符的优先级高于*运算符,因此首先将集合指针递增0,并应用点运算符,然后取消引用指针?不知怎的,这没有意义;任何澄清都表示赞赏。

1 个答案:

答案 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更清晰。